ninject模块的参数

时间:2011-11-25 04:46:47

标签: c# .net ninject

我需要为ninject模块提供一些全局范围,并认为最好通过模块注入它。

我目前正在扫描模块的程序集,因此无法确定如何提供这些参数(干净利落)。

我有一个控制台应用程序,我想根据应用程序的参数选择类型的实现。

问题是这些类型依赖于这些参数的特定反序列化,这是在查找时确定的。

我想做的是这样的事情:

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 个答案:

答案 0 :(得分:1)

在我看来,这个逻辑不属于模块。我会注入所有实例,然后在应用程序中决定采用哪个实例或注入工厂,并让工厂根据参数创建正确的类型。