我在使用Munq作为MVC3项目中的DI容器。我有一个从存储库中检索DTO的服务层。根据该DTO中的属性,我需要使用两种策略之一在DTO上执行计算。我可以在容器中注册一个指定类型,例如C#依赖注入和策略模式
Container.Register<ICalculation>("Type1", c => new Type1Calculation);
Container.Register<ICalculation>("Type2", c => new Type2Calculation);
然后,当试图实例化适当的策略时,我可以直接引用容器。
var calc = Container.Resolve<ICalculation>(dto.ServiceType);
但是,这使我对容器本身的依赖关系与相关的耦合和测试问题。我需要传递到服务构造函数中,以使我能够正确计算但不依赖于容器?我应该传递一个工厂,所以依赖关系在工厂而不在服务类中?
作为更新上述情况,我目前使用和推荐SimpleInjector https://simpleinjector.org为DI 。一些优秀的背景信息可在https://cuttingedge.it/blogs/steven/pivot/entry.php?id=91 – 2015-08-09 20:43:28