2012-01-30 2 views
0

임베디드 리소스로 솔루션에 추가하고이를 해결하기 위해 AppDomain.CurrentDomain.AssemblyResolve 이벤트를 사용하려고 생각하면서 depencency dll을 내 HttpHandler dll에 임베드하고 싶습니다.
void ProcessRequest(HttpContext context) 메서드의 이벤트를 구독하는 경우 이벤트 구독에 도달하기 전에 해결되지 않는 것 같습니다.
그럼 임베디드 리소스에서 dll을로드하려면 해당 이벤트를 어디서 구독해야합니까?임베디드 리소스를 사용하여 HttpHandler에 DLL 임베드

답변

1

처리기의 정적 생성자를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

public class Handler1: IHttpHandler 
{ 
    static Handler1() 
    { 
     AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => 
     { 
      if (string.Equals(e.Name, "ClassLibrary1", StringComparison.OrdinalIgnoreCase)) 
      { 
       using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Handler.ClassLibrary1.dll")) 
       { 
        var buffer = new byte[stream.Length]; 
        stream.Read(buffer, 0, buffer.Length); 
        return Assembly.Load(buffer); 
       } 
      } 
      return null; 
     }; 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     var mtd = Type.GetType("ClassLibrary1.Class1, ClassLibrary1").GetMethod("Hello", BindingFlags.Static | BindingFlags.Public); 
     var result = (string)mtd.Invoke(null, null); 
     context.Response.ContentType = "text/plain"; 
     context.Response.Write(result); 
    } 

    public bool IsReusable 
    { 
     get { return true; } 
    } 
} 
+0

그 이벤트에서 탈퇴해야한다고 생각합니다. – Giedrius