我有使用的服务ApplicationContext
。因此,我想使用依赖注入使应用程序为我提供上下文。所以我把建筑
Private _context;
// Constructor
public Service(ApplicationContext context) {
_context = context
}
问题是,当我初始化该服务时,我必须将其传递给上下文,这样才不是真的依赖注入吗?
有没有一种方法可以在不将上下文放入构造函数参数的情况下注入上下文?
****** 编辑 *****
抱歉,我第一次没有提供足够的信息。让我尝试更好地解释它。我有一项服务,我现在将其称为服务。它读取请求中的标头变量,并根据其值返回xml。我在控制器的每种不同方法中都更新了一个实例,因为它们的标头变量可能具有不同的值。我想将上下文注入服务而不是控制器中,所以我可以这样说:
Service service = new Service(Request);
代替这个:
Service service = new Service(Request, Context);
原因是服务在控制器不需要了解任何上下文的情况下完成所有工作。我拥有的代码可以工作,但是如果我能按照我的解释进行工作,那将是很棒的。
如果我们仍然可以[FromServices]
在财产上。那将是完美的解决方案。不幸的是,那被带走了。这只会使将上下文注入服务或控制器的构造函数中。在这种情况下,我仍然必须将上下文作为参数传递给服务。
有没有一种方法可以将上下文注入服务构造函数中,并避免在创建时将其作为参数传递?
可能会有一个更优雅的解决方案,我很乐意考虑。
它是对构造函数的依赖注入。使用DI,您不应该直接初始化服务。您应该在Startup.cs中注册Service和ApplicationContext。
当需要服务时,应将其通过构造函数注入到控制器中,并且DI链将自动将ApplicationContext实例注入到服务中。
当然,如果您不需要控制器中每个方法的服务,都可以将其初始化为@Oleg编写的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句