C# 引用类库中的注入?

C# 引用类库中的注入?,c#,.net,asp.net-core,code-injection,C#,.net,Asp.net Core,Code Injection,我有一个ASP.NETCore2.1网站,它引用了类库(DAL)。要从appsettings.json(ASP.NET项目)访问connectionstring,我需要以某种方式注入配置。我在类库中创建了一个类,如下所示: public class Helper { IConfiguration Configuration; public Helper(IConfiguration configuration) { Configuration =

我有一个ASP.NETCore2.1网站,它引用了类库(DAL)。要从appsettings.json(ASP.NET项目)访问connectionstring,我需要以某种方式注入配置。我在类库中创建了一个类,如下所示:

    public class Helper
{
    IConfiguration Configuration;
    public Helper(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public string GetConnectionString(string name)
    {
        return Configuration.GetConnectionString("DefaultConnection");
    }
}
但是,注入模式不会拾取此信息,因此它需要IConfigration来创建类


如何从类库访问appsettings.json?

您的类库不应该知道或关心您如何处理应用程序中的配置。您的
Helper
类所需要的只是一个连接字符串,所以您应该将它注入其中。如何提供该字符串是应用程序域的一部分的实现细节

public class Helper
{
     public Helper(string connectionString)
     {
          // do something with connectionString
     }
}
然后,在你的应用程序中:

services.AddScoped(p =>
    new Helper(Configuration.GetConnectionString("DefaultConnection")));

您的类库不应该知道或关心您如何处理应用程序中的配置。您的
Helper
类所需要的只是一个连接字符串,所以您应该将它注入其中。如何提供该字符串是应用程序域的一部分的实现细节

public class Helper
{
     public Helper(string connectionString)
     {
          // do something with connectionString
     }
}
然后,在你的应用程序中:

services.AddScoped(p =>
    new Helper(Configuration.GetConnectionString("DefaultConnection")));

Thansk看起来不错,但是如何实例化Helper类呢?它仍然需要连接字符串作为参数?它在上面的答案中。您正在将helper作为作用域服务添加,并确切地告诉它如何使用操作创建它,即从config获取连接字符串并将其传递给构造函数。你现在所要做的就是把你的助手注射到你需要的地方。DI容器负责其余部分。抱歉,但我仍然不明白,如果我将帮助器作为inparameter添加到我的工厂类中,如果我没有在实例化时手动提供帮助器,这个工厂类将抱怨。在我之前使用注入时,我只注册了ISomeInterface是SomeClassWithISomeInterface,然后在将ISometInterface作为inparameter添加到构造函数时,它已按照注入注册中的说明生成。这正是这里发生的事情。AddScoped在服务集合中注册您的帮助器类,当您的工厂需要该帮助器时,它将注入该实例。Thansk,看起来不错,但是如何实例化帮助器类?它仍然需要连接字符串作为参数?它在上面的答案中。您正在将helper作为作用域服务添加,并确切地告诉它如何使用操作创建它,即从config获取连接字符串并将其传递给构造函数。你现在所要做的就是把你的助手注射到你需要的地方。DI容器负责其余部分。抱歉,但我仍然不明白,如果我将帮助器作为inparameter添加到我的工厂类中,如果我没有在实例化时手动提供帮助器,这个工厂类将抱怨。在我之前使用注入时,我只注册了ISomeInterface是SomeClassWithISomeInterface,然后在将ISometInterface作为inparameter添加到构造函数时,它已按照注入注册中的说明生成。这正是这里发生的事情。AddScoped在服务集合中注册您的帮助器类,每当您的工厂需要该帮助器时,它将注入该实例。与我们分享您将如何初始化和使用
helper
class。与我们分享您将如何初始化和使用
helper
class。