我有一些具体类型正在使用此接口(interface),例如EmailFormatter
,TextMessageFormatter
等。
public interface IFormatter<T>
{
T Format(CompletedItem completedItem);
}
我遇到的问题是我的
EmailNotificationService
是我想要注入(inject)EmailFormatter
。该服务的构造函数签名为public EmailNotificationService(IFormatter<string> emailFormatter)
。我很确定我之前已经看过这件事,但是如果构造函数参数名称为
EmailFormatter
,我如何在Windsor中注册它以便注入(inject)emailFormatter
呢?这是我的温莎注册码。
container.Register(Component.For<IFormatter<string>>().ImplementedBy<EmailFormatter>());
最佳答案
服务代码:
public EmailNotificationService(IFormatter<string> emailFormatter){...}
依存关系注册码:
container.Register(
Component.For<IFormatter<string>().ImplementedBy<TextMessageFormatter>().Named("TextMessageFormatter"),
Component.For<IFormatter<string>().ImplementedBy<EmailFormatter>().Named("EmailFormatter"),
Component.For<INotificationService>().ImplementedBy<EmailNotificationService>().ServiceOverrrides(
ServiceOverride.ForKey("emailFormatter").Eq("EmailFormatter"))
);
关于c# - 如何基于构造函数参数名称注入(inject)适当的依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6973647/