依赖注入,但不注入控制器
Dependency injection, but not into a controller
我最近开始尝试 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?
我收到一个错误:"EmailServiceWrapper" 没有接受 0 个参数的构造函数。 我知道这意味着什么,但我不确定如何设置这个,我在网上看到很多关于将依赖项注入控制器的例子,但是这个例子呢?有帮助吗?
Unity 的目标是您不需要自己显式构造对象,而是需要所有内部构造函数;相反,你让容器为你做:
appUserManager.EmailService = container.Resolve<EmailServiceWrapper>();
的要点
container.RegisterType<IEmailService, EmailServiceGmail>();
是为容器提供新的任何需要 IEmailService 的对象所需的信息。
我最近开始尝试 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?
我收到一个错误:"EmailServiceWrapper" 没有接受 0 个参数的构造函数。 我知道这意味着什么,但我不确定如何设置这个,我在网上看到很多关于将依赖项注入控制器的例子,但是这个例子呢?有帮助吗?
Unity 的目标是您不需要自己显式构造对象,而是需要所有内部构造函数;相反,你让容器为你做:
appUserManager.EmailService = container.Resolve<EmailServiceWrapper>();
的要点
container.RegisterType<IEmailService, EmailServiceGmail>();
是为容器提供新的任何需要 IEmailService 的对象所需的信息。