Dav*_*rke 3 c# dependency-injection
我在一个MVC3项目中使用Munq作为DI容器.我有一个服务层,可以从存储库中检索DTO.根据DTO中的属性,我需要使用两种策略之一来对DTO执行计算.我可以在容器中注册一个命名类型,例如
Container.Register<ICalculation>("Type1", c => new Type1Calculation);
Container.Register<ICalculation>("Type2", c => new Type2Calculation);
Run Code Online (Sandbox Code Playgroud)
然后我可以在尝试实例化适当的策略时直接引用容器,例如
var calc = Container.Resolve<ICalculation>(dto.ServiceType);
Run Code Online (Sandbox Code Playgroud)
但这让我依赖于容器本身以及相关的耦合和测试问题.我需要传递给服务构造函数,这将允许我获得正确的计算,但不依赖于容器?我是否应该通过工厂,因此依赖是在工厂而不是服务类?
不确定Munq,但Autofac允许你传递Funcs,所以你可以完全跳过所有的工厂:
public class Foo
{
public Foo(Func<string, IBar> barFactory) { }
}
Run Code Online (Sandbox Code Playgroud)
检查Munq是否允许此类行为.
否则 - 是的,你将不得不诉诸手写工厂来提供另一层次的间接.
| 归档时间: |
|
| 查看次数: |
2107 次 |
| 最近记录: |