конфигурация autofac xml - PullRequest
       41

конфигурация autofac xml

2 голосов
/ 29 июля 2011

Я использую autofac framework с конфигурацией xml. У меня есть вопрос, вот ситуация. У меня есть класс с именем ApplicationConfig, который содержит массив объектов, который реализует интерфейс. И у меня есть два метода Начать и закончить. Идея состоит в том, чтобы вызвать метод start в начале приложения и завершить в конце.

Чтобы установить объекты, я вызываю SetConfigurations, у которого есть переменные числа аргументов.

Вот код:

public class ApplicationConfig
{
    private IAppConfiguration[] configurators;

    public void SetConfigurations(params IAppConfiguration[] appConfigs)
    {
        this.configurators = appConfigs ?? new IAppConfiguration[0];
    }

    public void Start()
    {
        foreach (IAppConfiguration conf in this.configurators)
            conf.OnStart();
    }

    public void Finish()
    {
        foreach (IAppConfiguration conf in this.configurators)
            conf.OnFinish();
    }
}

XML

<component type="SPCore.ApplicationConfig, SPCore"
    instance-scope="single-instance">
</component>

Мне просто интересно, смогу ли я через xml настроить компоненты, которые будут запускаться в начале приложения, вместо SetConfigurations. Я использую SetConfigurations в коде приложения.

Так что я хочу что-то подобное.

конструктор класса

public ApplicationConfig(params IAppConfiguration[] appConfigs)
{
    this.configurators = appConfigs;
}

XML

<component type="SPCore.ApplicationConfiguration.ConfigurationParamters, SPCore"
    instance-scope="single-instance">
</component>

<component type="SPCore.ApplicationConfig, SPCore" instance-scope="single-instance">
    <parameters>
        <parameter>--Any componet--</parameter>
        <parameter>--Any componet--</parameter>
        ....
        ....
        <parameter>--Any componet--</parameter>
    </parameters>
</component>

Я не знаю, как указать параметры для конструктора, которые являются другими компонентами ..

Итак, я хочу иметь возможность настроить приложение без компиляции.

1 Ответ

2 голосов
/ 12 августа 2011

XML-конфигурация Autofac не поддерживает этот сценарий.

Самый простой способ добиться того, что вам нужно, - это использовать IStartable (http://code.google.com/p/autofac/wiki/Startable) и IDisposable на объектах конфигурации, а не иметь класс ApplicationConfig вообще. Autofac вызовет Start() и Dispose() автоматически.

Если вам нужно, чтобы класс ApplicationConfig управлял процессом начала / завершения, вы можете контролировать, какие IApplicationConfiguration компоненты зарегистрированы. По умолчанию Autofac внедрит все реализации IApplicationConfiguration в параметр конструктора appConfigs, потому что это массив, и Autofac имеет специальную обработку для типов массивов. Просто включите <component> теги для каждого из IApplicationConfiguration s, которые вам нужны, и исключите те, которые вам не нужны.

Надеюсь, это поможет,

Ник

...