Аргументы к недействительным модулям - PullRequest
1 голос
/ 25 ноября 2011

Мне нужно предоставить какую-то глобальную область видимости для недействительного модуля, и подумать, что было бы лучше внедрить это через модуль.

В настоящее время я сканирую сборки для модулей, и поэтому могуне могу определить, как предоставить эти аргументы (чисто).

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

Проблемазаключается в том, что эти типы зависят от конкретной десериализации этих аргументов, которая определяется во время поиска.

Что я хотел бы сделать, это примерно так:

public class Module : MyNinjectModule<Module>
{
    private enum FictionalEnum
    {
        FirstType,
        SecondType
    }

    private string[] _args;

    private FictionalEnum Type
    {
        get
        {
            return IsFirstType(_args)
                       ? FictionalEnum.FirstType
                       : FictionalEnum.SecondType;
        }
    }

    public Module(string[] rawArgs)
    {
        _args = rawArgs;
    }

    protected override void  LoadCustomBindings()
    {
        Bind<IBaseType>().To<FirstImpl>()
            .When(req => this.Type == FictionalEnum.FirstType);

        Bind<IBaseType>().To<SecondImpl>()
            .When(req => this.Type == FictionalEnum.SecondType);
    }
}

У кого-нибудь есть предложения по этому поводу?

1 Ответ

1 голос
/ 25 ноября 2011

На мой взгляд, эта логика не входит в модуль. Я бы либо внедрил все экземпляры, а затем решил в приложении, какой из экземпляров взять или внедрить фабрику, и позволил фабрике создать правильный тип в зависимости от аргумента.

...