2017-02-15 98 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