我在解析器中有一个工厂方法。基本上当我加载一个令牌时,我会查找该令牌的处理程序,或者直接进入默认处理程序。我已将其实现为switch
和Dictionary<string,Type>
,但这两种方法都要求我将映射存储在除处理程序类之外的其他位置。
我们正在将Ninject用于IOC,因此我意识到我也可以使用
kernel.Get<ITokenHandler>(tokenName);
但这并不能保存我存储处理程序可以在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%20Context和http://ninject.codeplex.com/wikipage?title=Contextual%20Binding之间你应该能够以这样的方式绑定事物,以便你可以说Only(When.Context...)
来使选择工作吗?