2011-12-08 57 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())