使用Unity的StrategyPattern和DependencyInjection使用Unity的StrategyPattern和DependencyInjection我终于忍受了DependencyInjection(姗姗来迟);我开始玩Unity并遇到了StrategyPattern的问题。我可以使用容器根据名称向我返回策略的特定实现,但我不明白我应该如何在上下文中获得正确的策略。让我们用一个简单的例子来说明:上下文是一辆汽车,它有一个IEngine(策略)和2个实现,FastEngine和SlowEngine。代码将沿着这些行看:publicinterfaceIEngine{doubleMaxSpeed{get;}}内部类FastEngine:IEngine{publicdoubleMaxSpeed{get{return100d;}}}内部类SlowEngine:IEngine{publicdoubleMaxSpeed{get{return10d;}}}publicclassCar{私有IEngine引擎;publicdoubleMaximumSpeed{get{returnthis.engine.MaxSpeed;}}publicCar(IEngineengine){this.engine=engine;我的问题如下:我应该如何快速实例化或慢速实例化?我可以使用容器为我提供每个实现,我可以设置一个“默认”实现来使用:IUnityContainercontainer=newUnityContainer();容器.RegisterType();container.RegisterType("快");container.RegisterType("慢速");varcar=container.Resolve();Assert.AreEqual(100,car.MaximumSpeed);但我想要的是能够请求一辆具体实施该政策的汽车——比如varcar=container.Resolve(???use"Fast"or"Slow???);我可以用容器?还是我应该写一个使用容器的工厂?任何指导将不胜感激——我不确定我的想法是否正确!DI中的一个常见模式是,在运行时,只有一个实现给定抽象的。这只会让生活更轻松,因为您不需要处理您描述的歧义。但是,有时您需要更改实现,例如您提供的示例。许多DI容器提供的方法可以提供合格的参数,但这意味着您最终会将代码紧密耦合到特定的DI容器。更好的解决方案是引入一个可以提供所需内容的抽象工厂。类似于publicinterfaceICarFactory{CarCreate(IEngineengine);如果您需要注入更多策略,那么Builder设计模式可能更合适。无论如何,重点不是在容器中注册很多不同的Cars,而是注册单个ICarFactory实现。在您的客户端代码中,您将使用注入的ICarFactory来创建基于特定IEngine的Car实例。以上就是C#学习教程:使用Unity的策略模式和依赖注入全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——varcar=factory.Create(engine);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
