2012-01-30 34 views
0

私はHttpHandler DLLにdepencency dllを埋め込み、展開を容易にしたいので、埋め込みリソースとしてソリューションに追加し、それを解決するためにAppDomain.CurrentDomain.AssemblyResolveイベントを使用することを考えていました。
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

関連する問題