1

免责声明:我对 DI 容器有相当多的经验,但对 Unity 还是很陌生。

我有一个 MVC 项目,它使用构造函数注入与 Unity DI 连接起来,效果很好。但是我现在有一个服务,我想将它注入到我的控制器中(可能在某些时候注入到控制器以外的地方),并且该服务需要访问 ASP.NET 会话状态。该服务的目的是管理会话中的列表,我不希望控制器中的列表机制。

我意识到我可以在使用服务之前向我的控制器可以调用的服务(和它的接口)添加一个 Setup 方法,传入对 Session 的引用,但我不喜欢这样,因为我可能想要实现使用 Session 以外的东西进行我的状态管理的服务,而且它是泄漏到我的界面中的实现细节。我也意识到我可以在我的服务中使用 HttpContext.Current 但出于多种原因我不想这样做,特别是因为它为单元测试带来的问题。

Unity 可以将 HttpSessionState 的引用注入到服务的构造函数中吗?

4

1 回答 1

3

有几种方法可以做到这一点。最简单的可能是使用注入工厂:

container.RegisterType<HttpSessionState>(
    new InjectionFactory(c => { return HttpContext.Current.Session; }));

然后,在图中任何对 HttpSessionState 有依赖关系的地方,给定的委托都会运行并将其从 HttpContext.Current 中拉出。

当然,这仅在您针对每个请求进行新解析时才有效。

于 2013-04-09T18:21:47.727 回答