How do I get Unity to inject a reference to HttpSessionState to a service

我只是一个虾纸丫 提交于 2019-12-08 05:57:34

问题


Disclaimer: I have a fair bit of experience with DI containers but am quite new to Unity.

I have an MVC project that is all wired up with Unity DI using constructor injection and works great. But I now have a service that I want to inject into my controllers (and maybe places other than controllers at some point) and this service needs access to ASP.NET session state. The service's purpose is to manage a list in session and I don't want the list mechanics in my controller.

I realize I could add a Setup method to the service (and it's interface) that my controller could call, passing in a reference to the Session, before using the service, but I don't like that as I may want to make an implementation of the service that uses something other than Session for my state management and also it is implementation specifics leaking into my interface. I also realize I can use HttpContext.Current in my service but I don't want to do that for many reasons, particularly for the issues it creates for unit testing.

Can Unity inject a reference to HttpSessionState into the service's constructor?


回答1:


There's a couple ways to do this. The easiest is probably to use an injection factory:

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

Then anywhere you have a dependency on the HttpSessionState in the graph, the delegate given will run and pull it out of HttpContext.Current.

Of course, this only works if you're doing a new resolve per request.



来源:https://stackoverflow.com/questions/15908400/how-do-i-get-unity-to-inject-a-reference-to-httpsessionstate-to-a-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!