我正在使用Unity IoC容器来解析我的对象。但是,我遇到了一个问题。当我有多个构造函数时 - Unity如何知道使用哪一个?当我有一个和一个没有时,它似乎使用带参数的那个。我可以明确告诉它使用哪个构造函数吗?指定Unity IoC容器使用的构造函数
具体来说,我有一个情况类似于下面的人类有两个构造函数。在这种情况下,我希望IoC容器使用默认构造函数 - 不带参数 - 但它选择带参数的构造函数。
public class SomeValueObject
{
public SomeValueObject(string name)
{
Name = name;
}
public string Name { get; set; }
}
public class Person
{
private string _name;
public Person()
{
_name = string.Empty;
}
public Person(SomeValueObject obj)
{
_name = obj.Name;
}
}
这显然失败了,因为它不能创建SomeValueObject - 不知道要注入到它的字符串参数。它给出的错误是:
解析依赖失败,type =“MyApp.Person”,name =“”。异常消息是:当前构建操作(构建键构建键[MyApp.Person,null])失败:尝试调用构造函数MyApp.Person(MyApp.SomeValueObject obj)时无法解析参数obj。 (策略类型BuildPlanStrategy,指数3)
容器登记:
Container.RegisterType<Person, Person>(new Microsoft.Practices.Unity.ContainerControlledLifetimeManager());
而解决:
var person = Container.Resolve<Person>();
是不是IoC的使用接口? – Martin 2010-01-29 13:10:44
当然,我主要是这么做的。但是这对问题没有影响。 – stiank81 2010-01-29 13:13:02
@Martin许多程序员使用类并避免了制作接口的假通用性,然后只实现了它。它还可以避免在大多数企业应用程序中看到大量臭臭的IoC接线,但仍可以在需要时切换某些实施。 http://programmers.stackexchange.com/questions/133471/writing-testable-code-vs-avoiding-speculative-generality – 2015-12-14 11:57:38