C# 如何将连接字符串从.NetCore传递到EF类库

C# 如何将连接字符串从.NetCore传递到EF类库,c#,asp.net,entity-framework,asp.net-core,C#,Asp.net,Entity Framework,Asp.net Core,概述: 我有两个项目,一个ASP.NetCore Web API和一个EF 6.1类库。类库包含与我的数据库交互并返回对象的管理器类 我遵循本教程进行依赖项注入,但它没有解决我的项目中EF位于单独的类库中并且通过manager类进行交互的场景: 我以以下方式工作(但我不高兴,因为我不想让连接字符串过载): 是否可以在不必重载连接字符串的情况下与类库管理器交互(如下面的示例) FWIW:我不想重载连接字符串的原因是,此类库由非asp.netcore应用程序使用,其中Web.Config已包含连接

概述: 我有两个项目,一个ASP.NetCore Web API和一个EF 6.1类库。类库包含与我的数据库交互并返回对象的管理器类

我遵循本教程进行依赖项注入,但它没有解决我的项目中EF位于单独的类库中并且通过manager类进行交互的场景:

我以以下方式工作(但我不高兴,因为我不想让连接字符串过载):

是否可以在不必重载连接字符串的情况下与类库管理器交互(如下面的示例)

FWIW:我不想重载连接字符串的原因是,此类库由非asp.netcore应用程序使用,其中Web.Config已包含连接字符串

下面是一些我正在尝试但没有成功的新代码(如我下面的一个回复所示:

        public void ConfigureServices(IServiceCollection services)
    {
        services.AddDistributedMemoryCache();
        services.AddSession();
        services.AddAuthorization();
        services.AddMvc(options =>
        {
            options.Filters.Add(new ExceptionFilter());
        });
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddMvcGrid();

        services.AddScoped(_ => new AccountManager());
        services.AddScoped<LibDataEntities>(_ => new LibDataEntities(Configuration.GetConnectionString("LibDataEntities")));

    }

    private readonly AccountManager _am;
    public HomeController(AccountManager am)
    {
        _am = am;
    }

我认为如果你想遵循“微软风格”.AccountManager不应具有静态方法,并在构造函数中接收一个LibDataEntities,然后在DIINST中设置AccountManager和LibDataEntities。除了设置您拥有的连接字符串字段外,您不能将连接字符串注入帐户管理器吗?否则,请按照kblok所说的操作并注入上下文into您的
AccountManager
。如果我这样做并且想要保持分离,我会创建一个使用上下文的数据库类,然后将该类的实例注入
AccountManager
以及您拥有的所有其他存储库或服务。我遵循的教程(上面文章中的链接)是我第一次使用DI。我成功了,但我无法想出如何在AccountManager中使用注入的连接字符串调用我的静态方法。ColinM,你能给我看一些代码或给我指一个好的教程,在那里我可以更深入地研究这个问题吗?我喜欢数据库类和保持分离的想法。kblok,而不是谢谢你的反馈。我很乐意以我描述的方式使用静态类…但我愿意尝试遵循“微软风格”--只要我能保持关注点的分离。同样,这个类库被多个项目使用,每个项目都有不同的类型/技术。你能给我一个如何DI AccountManager和LibDataEntities的例子吗?@JasonSmith你很接近了,你确定你有名为“LibDataEntities”的连接字符串吗?
using (var db = new LibDataEntities())
        public void ConfigureServices(IServiceCollection services)
    {
        services.AddDistributedMemoryCache();
        services.AddSession();
        services.AddAuthorization();
        services.AddMvc(options =>
        {
            options.Filters.Add(new ExceptionFilter());
        });
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddMvcGrid();

        services.AddScoped(_ => new AccountManager());
        services.AddScoped<LibDataEntities>(_ => new LibDataEntities(Configuration.GetConnectionString("LibDataEntities")));

    }

    private readonly AccountManager _am;
    public HomeController(AccountManager am)
    {
        _am = am;
    }
LibData.Model.AccountDC account = _am.AuthenticateAccount(lvm.Email, lvm.Password);