14

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

我们正在为 IOC 使用 Ninject,所以我意识到我也可以使用

kernel.Get<ITokenHandler>(tokenName); 

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

4

2 回答 2

11

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

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

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

如果我遗漏了一些关键,请告诉我。

于 2010-01-21T19:09:25.240 回答
1

我使用的一种技术是以Bind这样一种方式填充,即您可以要求在您希望某人选择某些东西的点上交一个参数(在上下文中)。

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

于 2010-01-20T13:34:36.573 回答