2012-01-30 91 views
0

我想將depencency dll嵌入到HttpHandler dll中以便於部署,因此我想將其作爲嵌入式資源添加到解決方案中,並使用AppDomain.CurrentDomain.AssemblyResolve事件來解決此問題。
問題是,如果我在void ProcessRequest(HttpContext context)方法中訂閱了事件,看起來它在達到事件訂閱之前無法解析。
所以問題是我應該在哪裏訂閱該事件,以便能夠從嵌入式資源加載dll。使用嵌入式資源將dll嵌入HttpHandler

回答

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 2012-01-30 10:49:13