我有一些具体类型正在使用此接口(interface),例如EmailFormatterTextMessageFormatter等。

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/

10-11 00:59