前端之家收集整理的这篇文章主要介绍了
依赖注入 – Castle Windsor传递构造函数参数,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
502_0@
我有一个具有几个
属性的IAddress类。然后我有一个实现这个接口的具体类型。这个具体类型有一些我可以使用的不同的构造
函数。如何在运行时将参数值传递给其中一个构造
函数?我不能使用
配置文件,因为我将重复使用这个具体类型多次,每次参数值将不同。
IWindsorContainer container = new WindsorContainer(new XmlInterpreter());
IAddress address = container.Resolve<IAddress>();
public interface IAddress
{
string Address1 { get; set; }
string Address2 { get; set; }
string City { get; set; }
string State { get; set; }
string ZipCode { get; set; }
}
class TestAddress : IAddress
{
private string _address1;
private string _address2;
private string _city;
private string _countyName;
private string _state;
private string _zipCode;
public string Address1
{
get { return _address1; }
set { _address1 = value; }
}
public string Address2
{
get { return _address2; }
set { _address2 = value; }
}
public string City
{
get { return _city; }
set { _city = value; }
}
public string State
{
get { return _state; }
set { _state = value; }
}
public string ZipCode
{
get { return _zipCode; }
set { _zipCode = value; }
}
public string CountyName
{
get { return _countyName; }
set { _countyName = value; }
}
public MelissaAddress(string address1,string address2,string city,string state,string zipcode)
{
Address1 = address1;
Address2 = address2;
City = city;
State = state;
ZipCode = zipcode;
}
public MelissaAddress(string address1,string zipcode) : this(address1,address2,null,zipcode)
{ }
public MelissaAddress(string address1,string state) : this(address1,city,state,null)
{ }
}
您可以使用Resolve(对象参数AsAnonymousType)或Resolve(IDictionary参数)。 Windsor将选择最匹配的构造
函数。
例如,这将选择您的第二个构造函数:
container.Resolve<IAddress>(
new {address1 = "myaddress1",address2 = "myaddress2",zipcode = "myzipcode"}
)