简化,我有这个简单的代码: services.AddScoped<IFruit>(provider => { var httpContext = provider.GetRequiredService<IHttpContextAccessor>().HttpContext; if (httpContext.Request.QueryString.HasValue) { return new AppleService(...); } else return new OrangeService(...); });问题是AppleService&OrangeSservice在构造函数中有许多(且不同的)参数(其他 DI 参数),我认为我在这里走错了方向。public class AppleService:IFruit{ public AppleService (a,b,c,d,e....){}}public class OrangeService:IFruit{ public OrnageService (o,i,u,y,....){}}另外,我不想预先实例化这两个服务只是为了决定使用哪个。我希望实例化仅适用于我将要使用的服务。(根据请求参数)正如您所看到的,即使他只需要一个服务,他也会注入并实例化这两个服务。(在我的场景中,我需要范围实例化)问题:如何仅实例化每个请求参数所需的服务?
1 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
如果您将服务注册到 DI 容器中,然后使用 来解决它们,则可以使用大量参数来解决问题ServiceProvider。
这样您就不需要手动实例化服务。
services.AddScoped<AppleService>();
services.AddScoped<OrangeService>();
services.AddScoped<IFruit>(provider =>
{
var httpContext = provider.GetRequiredService<IHttpContextAccessor>().HttpContext;
if (httpContext.Request.QueryString.HasValue)
{
return provider.GetRequiredService<AppleService>();
}
return provider.GetRequiredService<OrangeService>();
});
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消