【发布时间】:2019-07-20 20:21:43
【问题描述】:
简化,我有这个简单的代码:
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,....){}
}
另外,我不想预先实例化这两个服务来决定去哪一个。
我希望实例化仅用于我将要使用的服务。 (根据请求参数)
但是,我在下面的answer 中看到了一个不错的解决方案(使用工厂),但是正如您所见,即使他只需要一个服务,他也会注入并实例化这两个服务。
(在我的场景中,我需要 Scoped 实例化)
问题:
如何仅根据请求参数实例化我需要的服务?
【问题讨论】:
-
我可以想出几种方法来实现这一点,但你的基本方法可能是一个错误。
标签: c# asp.net-core