如何避免传递IConfiguration和IHostingEnvironment

时间:2018-03-26 14:35:42

标签: c# inversion-of-control asp.net-core-2.0

我正在考虑重构和抽象一些用于学习目的的代码。

我创建了这个类:

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时,如何不必通过它?

1 个答案:

答案 0 :(得分:1)

您应该利用现有的DI并将PasswordReset转换为服务,而不是Emailer创建Emailer的新实例。

ConfigureServices()的{​​{1}}方法内,添加对Startup.cs类的引用:

Emailer

然后更改services.AddScoped<ISender, Emailer >(); 以引用新的PasswordReset服务:

ISender

现在你不再需要担心传递任何东西,DI正在为你处理它。