Unity 如何销毁游戏对象

8
有没有办法让Unity在Teardown的过程中处理掉通过属性注入的对象?
背景是我正在开发一个应用程序,使用了ASP.NET MVC 2、Unity和WCF。我们编写了自己的MVC控制器工厂,使用Unity实例化控制器,并通过控制器的公共属性使用[Dependency]特性注入WCF代理。在页面生命周期结束时,控制器工厂的ReleaseController方法被调用,然后我们调用IUnityContainer.Teardown(theMvcController)方法。此时,控制器会像预期一样被处置,但是我还需要处置被注入的WCF代理(实际上我需要调用它们的Close和/或Abort方法而不是Dispose,但这是一个后续问题)。
当然,我可以重写控制器的Dispose方法并在其中清理代理,但我不想让控制器知道注入接口的生命周期,甚至不知道它们引用了WCF代理。
如果我需要为此编写代码 - 最好的扩展点是什么?任何指针都将不胜感激。
3个回答

2

0

一旦你获得了UnityDependencyResolver

GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);

然后您可以调用解析器上的Dispose方法。在ASP.NET中,您可能会选择从Global.asax.cs的Application_End方法中调用它,如下所示:

GlobalConfiguration.Configuration.DependencyResolver.Dispose();

这将调用所有具有容器生命周期的内容上的dispose,例如使用以下方式添加到容器中的实例:

var myFooInstance = new Foo();
container.RegisterInstance<IFoo>(myFooInstance);

0
一个可能的解决方法是,您可以编写一个包装器来包装您的代理,当Unity处理实例时调用Dispose()方法时,它将调用代理的Close()方法。这对您来说是可行的情况吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接