gpt4 book ai didi

c# - 如何在startup.cs的ConfigureServices方法中正确注入(inject)DbContext实例(ASP.net core 1.1)?

转载 作者:太空狗 更新时间:2023-10-30 00:49:01 26 4
gpt4 key购买 nike

我已经为我的 ASP.NET 核心 Web 应用程序实现了 EntityFrameworkFileProvider,我希望 ViewDbContext 实例由构造函数中的 ASP.NET 核心 DI 框架注入(inject):

(ViewDbContext 是一个 dbContext)

public class EntityFrameworkFileProvider : IFileProvider
{
private ViewDbContext _context;

public EntityFrameworkFileProvider(ViewDbContext context)
{
/* should be injected by asp.net core DI */
_context = context;
}
public IDirectoryContents GetDirectoryContents(string subpath)
{
.....
}

public IFileInfo GetFileInfo(string subpath)
{
var result = new DatabaseFileInfo(_context, subpath);
return result.Exists ? result as IFileInfo : new NotFoundFileInfo(subpath);
}

public IChangeToken Watch(string filter)
{
return new DatabaseChangeToken(_context, filter);
}
}

现在我将 EntityFrameworkFileProvider 添加到 startup.cs 中的 RazorViewEngineOption如何让DI框架在startup.cs的ConfigureServices方法中自动注入(inject)ViewDbContext实例?我应该如何正确调用 EntityFrameworkFileProvider 构造函数?

在 Startup.cs 中

public void ConfigureServices(IServiceCollection services)
{
/* Add EntityFrameworkFileProvider to Razor engine */
services.Configure<RazorViewEngineOptions>(opts =>
{
opts.FileProviders.Add(new EntityFrameworkFileProvider(null?));
});

services.AddMvc();
}

最佳答案

我想我已经找到了解决方案!有什么想法吗?

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ViewDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
...
/* Add EntityFrameworkFileProvider to Razor engine */
var context = services.BuildServiceProvider()
.GetService<ViewDbContext>();

services.Configure<RazorViewEngineOptions>(opts =>
{
opts.FileProviders.Add(new EntityFrameworkFileProvider(context));
});

services.AddMvc();
}

关于c# - 如何在startup.cs的ConfigureServices方法中正确注入(inject)DbContext实例(ASP.net core 1.1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com