我正在考虑重构和抽象一些用于学习目的的代码。
我创建了这个类:
using System;
namespace app.Classes
{
public class Emailer : ISender
{
public Emailer(IConfiguration config, IHostingEnvironment env)
{
}
...
}
然后我有另一个我想使用该课程的课程:
namespace app.Notifications
{
public class PasswordReset : INotification
{
Emailer emailer = new Emailer();
public PasswordReset()
{
}
...
}
由于IConfiguration和IHostingEnvironment正在使用DI,当我在PasswordReset中实例化一个新的Emailer时,如何不必通过它?
答案 0 :(得分:1)
您应该利用现有的DI并将PasswordReset
转换为服务,而不是Emailer
创建Emailer
的新实例。
在ConfigureServices()
的{{1}}方法内,添加对Startup.cs
类的引用:
Emailer
然后更改services.AddScoped<ISender, Emailer >();
以引用新的PasswordReset
服务:
ISender
现在你不再需要担心传递任何东西,DI正在为你处理它。