L-F*_*our 6 c# asp.net-mvc dependency-injection unity-container
这是一个小问题,只是为了确保我正确理解Unity.
我在ASP.NET MVC应用程序中使用Unity,我已经注册了如下类型:
container.RegisterType<IPizzaService, PizzaService>();
Run Code Online (Sandbox Code Playgroud)
我在控制器中使用它,如:
public class PizzaController : Controller
{
private IPizzaService _pizzaService;
public PizzaController(IPizzaService pizzaService)
{
_pizzaService = pizzaService;
}
[HttpGet]
public ActionResult Index()
{
var pizzasModel = _pizzaService.FindAllPizzas();
...
}
}
Run Code Online (Sandbox Code Playgroud)
每次页面请求完成时,IPizzaService都会注入并使用新的实例.所以一切正常.
我的问题:我必须做一些特殊处理这个实例吗?我假设,一旦请求结束,控制器就会被处理掉,而PizzaService实例最终会被垃圾收集.
如果我需要确定性地处理实例,因为它使用实体框架上下文或非托管资源,我必须覆盖控制器的Dispose,并确保我自己调用实例的dispose.
对?如果没有,请解释原因:)
谢谢!
IMO,任何创建一次性物品的人都有责任处置它。当容器通过 注入一次性对象时RegisterType<I, T>(),我想保证该对象已准备好可供使用。但是,使用RegisterInstance<I>(obj)会自动处理您的对象。
这对于 IOC 容器来说可能很困难,而对于开箱即用的 Unity 来说则是不可能的。然而,我一直在使用一些非常漂亮的代码:
http://thorarin.net/blog/post/2013/02/12/Unity-IoC-lifetime-management-IDisposable-part1.aspx
该博客包含 DisposeTransientLifetimeManager 和 DisusingSharedLifetimeManager 的代码。使用扩展,容器可以调用Dispose()您的一次性对象。
需要注意的是,您需要引用正确(较旧)版本的 Microsoft.Practices.Unity.Configuration.dll 和 Microsoft.Practices.Unity.dll。
| 归档时间: |
|
| 查看次数: |
3248 次 |
| 最近记录: |