2012-08-08 57 views
3

我登记类型等这样的构造:统一选择具有参数

IUnityContainer container = new UnityContainer() 
       .RegisterType<IActiveDirectoryUser, ADUser>(); 

类ADUser便有包含2个构造函数,一个无参数,和一用一单个参数。当解析器解决它时,它会选择带参数的那个。我如何告诉它使用无参数控制器?

回答

10

在注册类型中,使用InjectionConstructor指示统一,它应该使用的无参数的构造函数:

IUnityContainer container = new UnityContainer(); 
container.RegisterType<IActiveDirectoryUser, ADUser>(new InjectionConstructor()); 

既然你是路过没有类型InjectionConstructor构造,团结就会知道使用参数的构造函数实例ADUser类时。

1

[InjectionConstructor]注释需要的构造函数。

+0

还有别的办法吗?违反关注点的分离,该班级不应该意识到Unity。 – Matthew 2012-08-08 18:56:47

+1

只能通过属性,或者您可以创建具体实例并注册它。例如IUnityContainer container = new UnityContainer(); container.RegisterInstance (new ADUser(5)); – GSerjo 2012-08-08 19:00:30

+0

很高兴知道这个选项,谢谢。 – Lyall 2013-12-26 23:19:15