【发布时间】:2016-05-28 13:53:18
【问题描述】:
我有一个使用ApplicationContext 的服务。所以我想使用依赖注入让应用程序给我上下文。所以我投入建设
Private _context;
// Constructor
public Service(ApplicationContext context) {
_context = context
}
问题是当我初始化这个服务时,我必须向它传递一个上下文,所以这不是真正的依赖注入,是吗?
有没有办法在不将其放入构造函数参数的情况下注入上下文?
****** 编辑 *****
很抱歉,我第一次没有提供足够的信息。让我试着更好地解释一下。我有一项服务,我现在只调用服务。它读取请求中的标头变量并根据它们的值返回 xml。我在控制器的每种不同方法中新建一个实例,因为它们可能具有不同的标头变量值。我希望将上下文注入服务而不是控制器,所以我可以这样说:
Service service = new Service(Request);
而不是这个:
Service service = new Service(Request, Context);
服务的原因是在控制器不需要知道任何内容的上下文中完成所有工作。我的代码可以工作,但如果我能按照我解释的方式让它工作,那就太好了。
如果我们仍然可以[FromServices] 在一个属性上。那将是完美的解决方案。不幸的是,它被拿走了。这只会将上下文注入到服务或控制器的构造函数中。在这种情况下,我仍然必须将上下文作为参数传递给服务。
有没有办法将上下文注入服务构造函数并避免在创建时将其作为参数传递?
可能有更优雅的解决方案,我很乐意考虑。
【问题讨论】:
-
请添加有关您的代码的更多详细信息。什么是应用程序上下文。你做了什么尝试?它怎么不起作用?等
-
请注意,使用单个上下文实例不是好的做法。如果您要删除上下文的构造函数参数,那么这意味着您想要使用 ApplicationContext 的单例实例,这可能会在以后给您带来麻烦,因为它本质上不是线程安全的。
标签: c# dependency-injection asp.net-core-mvc entity-framework-core