2013-04-03 7 views
5

WindowsのAutofacを使用しています。参照アセンブリをロードしようとすると、アプリケーションは実装されていますが、インタフェースの実装がそこに含まれている必要があります。以下の方法は、アセンブリをロードします。参照されているすべてのアセンブリをコード内で明示的に使用していないとしても、

private IEnumerable<Assembly> GetReferencedAssemblies(Assembly assembly) 
{ 
    var assemblyNames = assembly.GetReferencedAssemblies(); 

    List<Assembly> assemblies = new List<Assembly>(); 
    assemblies.Add(assembly); 
    foreach (var item in assemblyNames) 
    { 
    var loadedAssembly = System.Reflection.Assembly.Load(item.FullName); 
    assemblies.Add(loadedAssembly); 
    } 

    return assemblies; 
} 

我々はアセンブリに含まれるオブジェクトへのダミーの参照を行う場合、それはアセンブリをロードし、種類がautofacによって構築されている、我々はダミーのオブジェクトを削除する場合アセンブリはno含まれています。

オブジェクトを直接使用しているかどうかにかかわらず、参照されているアセンブリをすべて含める方法はありますか(インターフェイスの実装がそこにあるので、依然として必要です)。

これは、ビン内のすべてのDLLをロードするだけで、ASP.NET上で正常に動作します。

+1

これには少なくとも2つの方法があります。私がMEFを使う状況のように聞こえる。すべてのアセンブリに[Autofac Module](https://code.google.com/p/autofac/wiki/StructuringWithModules)を置き、MEFを使用してすべてのモジュールを取得すると、Autofacが引き継ぐことができます。 –

答えて

1

アセンブリ内の型を実際に参照しない場合、コンパイラは参照が冗長であると見なされるため、参照を削除します。 Assembly.Load()を使用して、必要なアセンブリをAppDomainに手動で読み込む必要があります。ロードするアセンブリをどのように決定するかは、あなた次第です。特定のフォルダ内のファイルを調べたり、アセンブリ名を含む構成ファイルを使用したりすることもできます。

関連する問題