![](/img/trans.png)
[英]Unity container - resolve object which always same constructor parameter
[英]Unity container resolve constructor with no parameter
我的一个班有2个构造函数:
public class Foo
{
public Foo() { }
public Foo(string bar) { }
}
当我从统一解析这个时,我得到一个异常,因为它查找string bar
参数。 但是我希望Unity使用没有参数的构造函数来实例化这个类。 我怎样才能做到这一点?
我使用LoadConfiguration
方法从配置文件中注册类型。
Unity容器配置:
container.LoadConfiguration("containerName");
配置文件:
<unity xmlns="">
<typeAliases>
<typeAlias alias="string" type="System.String, mscorlib" />
<typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
</typeAliases>
<containers>
<container name="containerName">
<types>
<type type="IFoo, Assembly"
mapTo="Foo, Assembly" />
...
</types>
</container>
</containers>
</unity>
构造函数上的[InjectionConstructor]
属性指定在解析服务时应使用哪个构造函数
public class Foo : IFoo { [InjectionConstructor] public Foo() { } public Foo(string bar) { } }
这种方法使你的类与Unity相结合,你的类变得不那么可重用(想象你需要在需要使用另一个构造函数的不同场景中使用Foo
)并且不推荐这种方式, 在这里阅读更多相关内容
更好的方法是使用API并按如下方式注册您的类
container.RegisterType<IFoo>(new Foo());
在这里,您明确定义了如何解析依赖项。
或者,您可以使用Xml
Config文件,即在<register>
元素中指定<contructor>
<register>
元素
请注意,我们没有在<constructor>
元素中指定<params>
子元素
如果不存在
<param>
子元素,则表示应调用零参数构造函数
在此处详细了解Xml
架构
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.