8

有没有办法让 Unity 将属性注入的对象作为 Teardown 的一部分进行处理?

背景是我正在开发一个使用 ASP.NET MVC 2、Unity 和 WCF 的应用程序。我们编写了自己的 MVC 控制器工厂,它使用统一来实例化控制器,并使用控制器公共属性上的 [Dependency] 属性注入 WCF 代理。在页面生命周期结束时,会调用控制器工厂的 ReleaseController 方法,我们调用 IUnityContainer.Teardown(theMvcController)。此时控制器已按预期处理,但我还需要处理注入的 wcf 代理。(实际上我需要对它们调用 Close 和/或 Abort 而不是 Dispose 但这是后来的问题。)

我当然可以覆盖控制器的 Dispose 方法并清理那里的代理,但我不希望控制器必须知道注入接口的生命周期,甚至它们引用 WCF 代理。

如果我需要自己为此编写代码 - 最好的扩展点是什么?我会很感激任何指针。

4

3 回答 3

2

我创建了一个统一扩展,它将负责处理由容器在 TearDown 上创建的实例。

http://www.neovolve.com/2010/06/18/unity-extension-for-disposing-build-trees-on-teardown/

于 2010-06-18T03:48:23.167 回答
0

一种可能的解决方法是,您还可以在代理周围编写一个包装器,该包装器将在处置时(由 Unity 在处置实例时调用)调用代理的 Close 方法。这对你来说是一个可行的方案吗?

于 2011-11-17T09:26:52.550 回答
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);
于 2021-01-31T12:58:37.700 回答