gpt4 book ai didi

c# - 使用 IOC 容器的策略设计模式 - 专门用于 Ninject

转载 作者:太空狗 更新时间:2023-10-29 21:20:24 24 4
gpt4 key购买 nike

我有一个类需要使用策略设计模式。在运行时,我需要切换不同的算法,以查看对应用程序性能的影响。

有问题的类目前在构造函数中有四个参数,每个参数代表一个算法。

如何使用 Ninject(或通用方法)我仍然可以使用 IOC 但使用策略模式?

当前的限制是我的内核(容器)知道每个算法接口(interface),但只能绑定(bind)到一个具体类。目前我能看到的唯一解决方法是在构建时传入所有八种算法,但使用不同的接口(interface),但这似乎完全没有必要。如果我不使用 IOC 容器,我不会这样做,所以必须有一些解决方法。

代码示例:

class MyModule : NinjectModule 
{
public override void Load()
{
Bind<Person>().ToSelf();
Bind<IAlgorithm>().To<TestAlgorithm>();
Bind<IAlgorithm>().To<ProductionAlgorithm>();
}
}

人们需要同时使用这两种算法,这样我就可以在运行时进行切换。但是只有 TestAlgorithm 是绑定(bind)的,因为它是容器中的第一个。

最佳答案

让我们退后一步,看看更大的图景。由于您希望能够在运行时切换 Strategy,因此必须有某种信号机制告诉 Person 切换 Strategy。如果您的应用程序是 UI 驱动的,可能会有一个按钮或下拉列表,用户可以在其中选择要使用的策略,但即使不是这种情况,一些外部调用者也必须映射一 block 运行时数据到策略实例。

standard DI solution when you need to map a run-time instance to a dependency is to use an Abstract Factory .

您无需注册容器中的各个策略,而是注册工厂。

写一个完整的API是完全可能的DI-friendly, but still DI Container-agnostic .

关于c# - 使用 IOC 容器的策略设计模式 - 专门用于 Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2392648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com