我正在遵循基于请求依赖注入的.NET核心示例:
https://dotnetliberty.com/index.php/2016/04/11/asp-net-core-custom-service-based-on-request/
我基于某些http标头有不同的服务实现,我想根据请求加载特定服务。
在startup.cs中,我有以下代码:
services.AddDbContext<MyContext>(options => options.UseMysql);
services.AddTransient<IMyService>(serviceProvider =>
{
var context = serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
var header = context.Request.Headers["mycustomheader"];
if (header == "first") return new MyFirstService();
else return new SecondService();
});
这很好用。在每个请求中,我都会获得标头并使用不同的IMyService实现。
问题是我还需要注入我之前定义的DbContext,我不知道该怎么做,或者它是否可能。
我的意思是我需要这样做:
new FirstService(DbContext); instead of new FirstService();
and new SecondService(DbContext); instead of new SecondService();
这在.NET核心中是否可行?
答案 0 :(得分:2)
您需要使用DI:
var context = serviceProvider.GetRequiredService<MyContext>();
这与您为获取IHttpContextAccessor
所做的工作相同。