Виндзорский замок: сокращенный интерфейс для параметров Resolve()?

Есть ли какой-то сокращенный интерфейс для создания словаря параметров, который будет предоставлен методу IWindsorContainer.Resolve()? Что-то типа:

container.Resolve<ConsoleApp>(Parameters.Add("args", args).Add("banana", X).Add...)

person Igor Brejc    schedule 30.06.2009    source источник


Ответы (3)


Вы также можете передать анонимный объект в качестве параметра:

container.Resolve<ConsoleApp>(new { args, banana = X });
person Mauricio Scheffer    schedule 30.06.2009

Чтобы ответить на мой собственный вопрос: похоже, я забыл об инициализаторах коллекций:

container.Resolve<ConsoleApp>(new Hashtable(){{"args", args}});
person Igor Brejc    schedule 30.06.2009

По состоянию на 2021 год для этого есть гораздо более безопасный и удобный API — класс Arguments.

Вы можете использовать его следующим образом:

var arguments = new Arguments
{
    { "args", args },
    { "banana", X },
    { typeof(IService), new MyService() }
};

container.Resolve<ConsoleApp>(arguments);

Также есть Fluent API:

var arguments = new Arguments()
    .AddNamed("args", args)
    .AddTyped<IService>(new MyService());

container.Resolve<ConsoleApp>(arguments);

Вот ссылка: https://github.com/castleproject/Windsor/blob/master/docs/arguments.md

person Oleksii Kavka    schedule 28.04.2021