2011-12-08 17 views
2

Unity.AutoRegistrationを使用して、インターフェイスを実装に自動的に配線しようとしています。私の構成は次のようになります。Unity.AutoRegistrationは自動登録ではありません

public static class UnityConfigurator 
{ 
    public static UnityContainer Configure() 
    { 
     var container = new UnityContainer(); 
     container.ConfigureAutoRegistration()  
       .LoadAssemblyFrom(typeof(UnityConfigurator).Assembly.Location) 
       .LoadAssemblyFrom(typeof(ICountryFilterDataRepository).Assembly.Location) 
       .ExcludeSystemAssemblies() 
       .ExcludeAssemblies(a => a.GetName().FullName.Contains("Specs"))      
       .ApplyAutoRegistration(); 
     return container; 
    } 
} 

しかし、明らかにマッピングが設定されていない暗示され、私はこのエラーを取得する:(働いていない:、

現在のタイプ、 Blah.IFooをあなたがタイプ マッピングが欠落しています。 インタフェースおよび構築することができないのですか?

私の設定コードと間違って何?ありがとう

+0

を修正する必要がありますIFooのために配線する必要がありますか?あなたのインターフェイスと実装用のアセンブリが自動的にロードされていますか? –

+0

@ThomasJaskula同じ名前のIFooはFooにマップされ、実装とインターフェイスは同じアセンブリ内にあります。 – Charlie

+0

@Charlie AutoRegistrationに精通していませんが、ホームページにはIncludeも使用する必要があると思われます。 '.Include(If.Implements 、Then.Register()。WithName(" Foo "))' –

答えて

0

Unity.AutoRegistrationの代替手段を試してみたいかもしれません。

CodePlexのTecXプロジェクトには、StructureMap構成エンジンのポートがあり、慣例による登録をサポートしています。 Unityの設定は、TecX.Unity.Configurationにあります。どのように使用されているかを示すUnitTestsがあります。


UPDATE:IFooのTecX自動登録に

は次のようになります。

ConfigurationBuilder builder = new ConfigurationBuilder(); 
builder.Scan(
    x => 
    { 
    x.AssembliesFromApplicationBaseDirectory(); 
    x.With(new ImplementsIInterfaceNameConvention()); 
    }); 
2

この行を追加することの名前は何の問題に

.Include(If.ImplementsITypeName, Then.Register()) 
関連する問題