基于Startup请求的.NET核心自定义服务

时间:2017-06-06 09:34:42

标签: c# .net asp.net-core dbcontext

我正在遵循基于请求依赖注入的.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核心中是否可行?

1 个答案:

答案 0 :(得分:2)

您需要使用DI:

var context = serviceProvider.GetRequiredService<MyContext>();

这与您为获取IHttpContextAccessor所做的工作相同。