我正在使用Unity IoC容器来解析我的对象。然而,我遇到了一个问题。当我有多个构造函数时,Unity如何知道要使用哪一个?当我有一个带参数和一个不带参数的构造函数时,它似乎会使用带参数的那个构造函数。我能否明确告诉它要使用哪个构造函数?
具体来说,我有一个类Person,它有两个构造函数。在这种情况下,我希望IoC容器使用默认构造函数(不带参数),但它选择了带参数的构造函数。
具体来说,我有一个类Person,它有两个构造函数。在这种情况下,我希望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 - 不知道要注入哪个字符串参数。 它给出的错误是:
依赖项的解析失败,类型 =“MyApp.Person”,名称 =“”。 异常消息是:当前构建操作(构建键Build Key [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>();