在Karl Seguin的一篇文章中,他展示了可测试性的设计导致了更好的设计,在这种情况下,composition over inheritance。
在示例中,他的CachedEmployeeLookup
依赖于EmployeeLookup
,它们都实现了相同的界面IEmployeeLookup
如何在StructureMap中配置它,以便程序使用的默认类为CachedEmployeeLookup
而CachedEmployeeLookup
注入EmployeeLookup
?
答案 0 :(得分:1)
我认为这样的事情会起作用:
For<IEmployeeLookup>().Add<EmployeeLookup>().
Named("employeeLookup");
For<IEmployeeLookup>().Use<CachedEmployeeLookup>()
.Ctor<IEmployeeLookup>().Is(
d => d.TheInstanceNamed("employeeLookup"));
答案 1 :(得分:1)
您可以在设置类型映射时使用EnrichWith
,例如
ObjectFactory.Initialize(i =>
{
i.For<IDecorator>().Use<Inner>().EnrichWith(d => new Decorator(d));
});
This page在StructureMap中有一些拦截的例子