2017-02-15 96 views
1

我正在使用Unity進行依賴注入。我有一堆以文本「Mapper」結尾的類,例如。統一自動註冊類

HomeMapperContactMapperEmployeeMapper

目前即時通訊註冊這些類使用Unity作爲

conatiner.RegisterType<HomeMapper>; 
conatiner.RegisterType<ContactMapper>; 
conatiner.RegisterType<EmployeeMapper>; 

我想使用Unity的自動註冊功能來註冊與「映射」結束,這是所有類在某些組裝中。

我已經添加了參考`Unity.AutoRegistration.dll'程序集,但即時查找語法?

更新1

public class HomeMapper 
{ 
    private readonly MyService _service; 
    public HomeMapper(MyService service) 
    { 
     _service = service; 
    } 

    public MyModel Map(MyEntity entity) 
    { 
     // do mapping here 
    } 
} 

我可以註冊HomeMapper爲單身?注意它需要MyService實例作爲構造函數的參數和MyService被註冊爲

container.RegisterType<MyService, MyService>(); 
+0

你需要註冊_concrete_類型[統一](https://www.nuget.org/packages/Unity/)? –

+0

是的,這些是具體的類型,它們不是從任何接口派生的 – LP13

+0

我的意思是你可以解決它們,而無需事先註冊。你爲什麼要嘗試註冊這些課程? –

回答

1

使用Unity你do not need to register具體類(不同於新的ASP.NET核心的依賴注入框架,所有registrations need to be explicit)。下面的測試成功創建了接收HomeMapper作爲一個依賴的HomeController的一個實例:

public class ResolveControllerTest 
{ 
    [Xunit.Fact] 
    public void ResolveHomeControllerWithoutRegistration() 
    { 
     var container = new UnityContainer(); 
     var controller = container.Resolve<HomeContoller>(); 
     Assert.NotNull(controller); // pass 
    } 
} 

public class HomeContoller 
{ 
    public HomeContoller(HomeMapper mapper) 
    { 
    } 
} 

public class HomeMapper 
{ 
} 

可能要註冊的具體類,比如,當你需要定製的壽命。

編輯:

假設映射是無國籍,所有以「映射」可以註冊爲Singletones結束等級:

var container = new UnityContainer(); 
container.RegisterTypes(
    AllClasses.FromLoadedAssemblies() 
     .Where(t => t.Name.EndsWith("Mapper")), 
    WithMappings.None, 
    WithName.Default, 
    WithLifetime.ContainerControlled); 

// controllers are 'transient' - new instance per resolve 
var controller1 = container.Resolve<HomeContoller>(); 
var controller2 = container.Resolve<HomeContoller>(); 

// mapper is a singleton. Same instance returned 
var mapper1 = container.Resolve<HomeMapper>(); 
var mapper2 = container.Resolve<HomeMapper>(); 
+0

如果我不註冊具體類,那麼控制器實例將如何得到解決,那麼什麼是該類的defuly生活時間。它是否每個請求創建一個實例? – LP13

+0

[暫時](https://msdn.microsoft.com/en-us/library/dn178463(v = pandp.30).aspx#sec34) –

+0

是的,他們是無狀態的類。每個映射類有方法做映射從EF實體到模型和模型返回到實體 – LP13