Fin*_*las 6 c# design-patterns ninject ioc-container strategy-pattern
我有一个课程需要使用策略设计模式.在运行时,我需要切换不同的算法,以查看对应用程序性能的影响.
有问题的类目前在构造函数中有四个参数,每个参数代表一个算法.
如何使用Ninject(或通用方法)仍然可以使用IOC但使用策略模式?
目前的限制是我的内核(容器)知道每个算法接口,但只能绑定到一个具体的类.我现在可以看到的唯一方法是在构造中传递所有八种算法,但是使用不同的接口,但这似乎完全是不必要的.如果我没有使用IOC容器,我不会这样做,所以必须有一些解决方法.
代码示例:
class MyModule : NinjectModule
{
public override void Load()
{
Bind<Person>().ToSelf();
Bind<IAlgorithm>().To<TestAlgorithm>();
Bind<IAlgorithm>().To<ProductionAlgorithm>();
}
}
Run Code Online (Sandbox Code Playgroud)
人需要使用这两种算法,以便我可以在运行时切换.但只有TestAlgorithm被绑定,因为它是容器中的第一个.
让我们退后一步,检查一下稍大的图片.由于您希望能够在运行时切换策略,因此必须有某种信令机制告诉Person切换策略.如果您的应用程序是由UI驱动的,可能会有一个按钮或下拉列表,用户可以在其中选择要使用的策略,但即使不是这种情况,一些外部调用者也必须将一段运行时数据映射到战略的实例.
当您需要将运行时实例映射到依赖项时,标准DI解决方案是使用抽象工厂.
您可以注册工厂,而不是使用容器注册单个策略.
完全可以编写一个完整的API,以便它是DI友好的,但仍然是DI容器不可知的.
归档时间: |
|
查看次数: |
3584 次 |
最近记录: |