Подтвердить что ты не робот

Параметры параметров конвейера Виндзор

У меня есть класс 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 address2, string zipcode) : this(address1, address2, null, null, zipcode)
    { }

    public MelissaAddress(string address1, string address2, string city, string state) : this(address1, address2, city, state, null)
    { }
}
4b9b3361

Ответ 1

Вы можете использовать Resolve(object argumentsAsAnonymousType) или Resolve(IDictionary arguments). Windsor выберет лучший конструктор соответствия.

Например, это выберет ваш второй конструктор:

container.Resolve<IAddress>(
    new {address1 = "myaddress1", address2 = "myaddress2", zipcode = "myzipcode"}
)