构造函数中依赖注入上下文类

Dbl*_*247 5 c# dependency-injection entity-framework-core asp.net-core-mvc

我有一个使用的服务ApplicationContext.所以我想使用依赖注入让应用程序给我上下文.所以我投入了施工

Private _context;

// Constructor
public Service(ApplicationContext context) {
    _context = context
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我初始化这个服务时,我必须传递一个上下文,这样它不是真正的依赖注入吗?

有没有办法在不将它放入构造函数参数的情况下注入上下文?

******编辑*****

对不起,我第一次没有提供足够的信息.让我试着更好地解释一下.我有一项服务,我现在只打电话给服务.它读取请求中的头变量,并根据它们的值返回xml.我在控制器的每个不同方法中新建一个实例,因为它们可能具有不同的标头变量值.我想将上下文注入服务而不是控制器,所以我可以这样说:

Service service = new Service(Request);
Run Code Online (Sandbox Code Playgroud)

而不是这个:

Service service = new Service(Request, Context);
Run Code Online (Sandbox Code Playgroud)

服务的原因是在控制器不需要了解任何内容的情况下完成所有工作.我的代码会起作用,但如果我能按照我解释的方式工作,那将会很棒.

如果我们仍然可以在属性上[FromServices].那将是完美的解决方案.不幸的是,这被带走了.这只会将上下文注入到服务或控制器的构造函数中.在这种情况下,我仍然必须将上下文作为参数传递给服务.

有没有办法将上下文注入到服务构造函数中,并避免在创建时将其作为参数传递?

可能会有一个更优雅的解决方案,我很乐意考虑.

Igo*_*gor 1

这是对构造函数的依赖注入。使用 DI,您不应该直接初始化您的服务。您应该在 Startup.cs 中注册您的ServiceApplicationContext

当您需要 Service 时,您应该通过构造函数将其注入到控制器中,DI 链将自动将 ApplicationContext 实例注入到 Service 中。

当然,如果您不需要为控制器中的每个方法提供服务,您可以将其初始化为@Oleg 编写的方法。