ASP.NET 核心依赖注入

本文关键字:注入 依赖 核心 NET ASP | 更新日期: 2023-09-27 17:56:14

在我的 asp.net 核心解决方案中,我有两个项目:asp.net 应用程序和库,其中包含包含模式存储库的模型层。

我在应用程序中问 DI 实现我的界面

services.AddTransient<IRepositrory, Repository>();

但!存储库构造函数具有参数

public Repository(string connectionString)
{
    _appDBContext = new AppDBContext(connectionString);
}

如何正确配置 DI 以从appsettings.json(asp.net 应用程序)创建具有特定字符串的存储库?

ASP.NET 核心依赖注入

存在接受实现工厂的重载

services.AddTransient<IRepository>(isp => new Repository(conn));

可以使用以下命令获取连接字符串

Configuration.GetConnectionString("DefaultConnection")

您也可以使用AddInstance方法:

var connectionString=Configuration.GetConnectionString("DefaultConnection");
services.AddInstance<IRepository>(new Repository(connectionString));

但我同意他在上面的评论中所说的@MikeSW。您应该注册DbContext并将其用作存储库构造函数中的参数:

 services.AddDbContext<AppDBContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

您的构造函数将是:

public Repository(AppDBContext context)
{
    _appDBContext = context;
}

您应该将服务放在ConfigureServices的启动方法中.cs

    public Startup()
    {
        var builder = new ConfigurationBuilder()
                        .AddJsonFile("appsettings.json");
        Configuration = builder.Build();
    }
    public IConfiguration Configuration { get; set; }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<MyDbContext>(
            options => options.UseSqlServer(Configuration["database:connection"]));
     }

其中 appsettings.json:

{
"database": {
"connection":  "Data Source=(localdb)''mssqllocaldb;Initial Catalog=MyDb"
   }
 }
services.AddTransient<IRepository>(isp => new Repository(connection));

使用此选项接受实现工厂并检索连接字符串,请使用以下命令:-

Configuration.GetConnectionString("DefaultConnection")