2016-11-15 6 views
2

現在以外のネームスペース内のすべてのアセンブリは、私は次のプロジェクトに分割され、私の溶液中でのIoCを使用しています:フィルター1

Toolbox.DAL
Toolbox.BL
Toolbox.EntityFramework
Toolbox.API(

using (WindsorContainer container = new WindsorContainer()) 
{ 
    AssemblyFilter filter = new AssemblyFilter(HttpRuntime.BinDirectory, "Toolbox.*.dll"); 
    IWindsorInstaller installer = FromAssembly.InDirectory(filter); 

    return new CastleInitialiser(container.Install(installer)); 
} 
:私のメインのプロジェクトにコンポーネントを登録するには、メインプロジェクト)

、私は次のコードビットを使用します

しかし、これは私のメインプロジェクトの依存関係が通常の初期化中に1回、コンパイルされたアセンブリから2回登録されるという問題を引き起こしています。

現在のプロジェクトアセンブリを除くすべてのアセンブリをピックアップするようにフィルタを変更する方法はありますか?私は周りを探し回っていますが、アセンブリフィルタを適切に使用する方法の例はまったく見つかりませんでした。

答えて

2

はちょうどあなたが追加のフィルタを追加することができますsource code

を見ました。

using (WindsorContainer container = new WindsorContainer()) 
{ 
    AssemblyFilter filter = new AssemblyFilter(HttpRuntime.BinDirectory, "Toolbox.*.dll"); 

    //this 
    filter = filter.FilterByName(name => !name.Name.Equals("Toolbox.API")); 

    IWindsorInstaller installer = FromAssembly.InDirectory(filter); 

    return new CastleInitialiser(container.Install(installer)); 
} 

私の構文は100%正確ではないかもしれませんが、その方法を説明する必要があります。

+1

素敵な、ありがとう - 構文は 'フィルタ= filter.FilterByName ...' –

+0

のおかげでした。修正されました。 – jgauffin

1

名前で、あなたのアセンブリをフィルタリングすることができます。

AssemblyFilter filter = 
    new AssemblyFilter(HttpRuntime.BinDirectory, "Toolbox.*.dll") 
     .FilterByName(an => !an.Name.StartsWith("Toolbox.API");