我需要为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);
}
}
有人对此有任何建议吗?
答案 0 :(得分:1)
在我看来,这个逻辑不属于模块。我会注入所有实例,然后在应用程序中决定采用哪个实例或注入工厂,并让工厂根据参数创建正确的类型。