使用Ninject IOC替换工厂

时间:2010-01-20 04:43:16

标签: c# inversion-of-control ninject factory-pattern

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

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

kernel.Get<ITokenHandler>(tokenName); 

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

2 个答案:

答案 0 :(得分:11)

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

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName);

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

如果我遗失了某些钥匙,请告诉我。

答案 1 :(得分:1)

我使用的一种技术是Bind这样的东西,你可以要求在某个地方输入一个参数(在上下文中),你希望有人选择一些东西。

http://ninject.codeplex.com/wikipage?title=Providers%20and%20the%20Activation%20Contexthttp://ninject.codeplex.com/wikipage?title=Contextual%20Binding之间你应该能够以这样的方式绑定事物,以便你可以说Only(When.Context...)来使选择工作吗?