我最近开始尝试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参数的构造函数。我知道这意味着什么,但我不知道如何设置它,我在网上看到很多关于向控制器注入依赖关系的例子但是怎么样?这个案例?有什么帮助吗?
答案 0 :(得分:3)
Unity的目标是你不必自己显式构造对象,所有内部构造函数都需要;相反,你得到容器为你做这件事:
appUserManager.EmailService = container.Resolve<EmailServiceWrapper>();
的要点
container.RegisterType<IEmailService, EmailServiceGmail>();
是为容器提供所需的信息,以便新建任何需要IEmailService的对象。