使用Ninject IOC替换工厂

bar*_*ong 14 c# ninject inversion-of-control factory-pattern

我在解析器中有一个工厂方法.基本上当我加载一个令牌时,我会查找该令牌的处理程序,或者直接进入默认处理程序.我已将其实现为a switch和as,Dictionary<string,Type>但两种方法都要求我将映射存储在除处理程序类之外的其他位置.

我们正在使用Ninject for IOC,因此我意识到我也可以使用它

kernel.Get<ITokenHandler>(tokenName); 
Run Code Online (Sandbox Code Playgroud)

但这并没有节省我存储处理程序在2个位置可以处理的令牌的信息.有没有办法可以装饰处理程序,以便自动映射?

Pet*_*yer 11

如果我正确地按照您的问题,听起来您想要检索命名绑定.你没有提到你正在使用的Ninject版本,但根据你的代码片段,我猜你正在使用Ninject 2.0.如果是这种情况,那么我认为这对你的模块中的绑定就足够了:

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName);
Run Code Online (Sandbox Code Playgroud)

将尽可能多的具体类型绑定到同一个接口并按名称区分它们,然后使用您在问题中指定的精确语法检索它们.

如果我遗漏了一些钥匙,请告诉我.