依赖注入,但不是控制器

时间:2015-04-22 01:59:01

标签: c# dependency-injection inversion-of-control

我最近开始尝试DI。我使用Unity Ioc将业务逻辑层的EmailService注入表示层中的EmailServiceWrapper,然后实例化,我的代码如下:

public class EmailServiceWrapper : IIdentityMessageService
{
    private readonly IEmailService _emailService;
    public EmailServiceWrapper(IEmailService emailService)
    {
        this._emailService = emailService;
    }
    public async Task SendAsync(IdentityMessage message)
    {
        await _emailService.configSendGridasync(message.Body, message.Subject, new MailAddress(message.Destination));
    }
} 

我像这样注册映射:

    public static void RegisterTypes(IUnityContainer container)
    {
        container.RegisterType<IEmailService, EmailServiceGmail>();
    }

最后在我的ApplicationUserManager.cs中,我尝试执行以下操作:

    appUserManager.EmailService = new EmailServiceWrapper(); //Dependency injection?

我收到错误:&#34; EmailServiceWrapper&#34;没有一个带0参数的构造函数。我知道这意味着什么,但我不知道如何设置它,我在网上看到很多关于向控制器注入依赖关系的例子但是怎么样?这个案例?有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

Unity的目标是你不必自己显式构造对象,所有内部构造函数都需要;相反,你得到容器为你做这件事:

appUserManager.EmailService = container.Resolve<EmailServiceWrapper>();

的要点
container.RegisterType<IEmailService, EmailServiceGmail>();

是为容器提供所需的信息,以便新建任何需要IEmailService的对象。