【发布时间】:2017-04-27 12:56:31
【问题描述】:
我有一个接口INexus 用于两个不同的类。第一个类Nexus 是核心功能,另一个是“装饰类”NexusDecorator,它接收INexus 参数,调用它,并为结果增加更多价值。
public interface INexus
{
string Eval();
}
public class Nexus : INexus
{
public string Eval()
{
return "Hello World!";
}
}
public class NexusDecorator : INexus
{
private readonly INexus _nexus;
private readonly IClock _clock;
private readonly IPrettifyer _prettifyer;
public NexusDecorator(INexus nexus, IClock clock, IPrettifyer prettifyer)
{
_nexus = nexus;
_clock = clock;
_prettifyer = prettifyer;
}
public string Eval()
{
var s = _clock.Now() + ": " + _nexus.Eval();
return _prettifyer.Emphasize(s); // returns somehing like "<i>12:30: Hello World!</i>"
}
}
我使用 Unity 注册类型:
var container = new UnityContainer();
container.RegisterType<INexus, Nexus>("base")
container.RegisterType<INexus, NexusDecorator>(
new InjectionConstructor(
new ResolvedParameter<INexus>("base"),
new ResolvedParameter<IClock>(),
new ResolvedParameter<IPrettifyer>()
));
InjectionConstructor 设置有一个实例列表,这些实例与 NexusDecorator 的构造函数以正确的顺序匹配,使用注册的类型。这很好,但默认注册的唯一例外是使用以Nexus 类为目标的命名INexus 注册。必须指定 Unity 应该如何解决 IClock 和 IPrettifyer 的基本默认注册似乎过于繁琐。
有没有办法告诉 Unity只覆盖构造函数的 INexusparameter 并省略其余参数的规范?
-西格德·加索尔
【问题讨论】:
-
问题stackoverflow.com/questions/6109646/…的答案看起来可以接受吗?
-
这和我的问题差不多,谢谢!
标签: constructor unity-container