我通过配置文件注册需要特殊处理的组件(即WCF客户端)。
<autofac>
<components>
<component
type="SomeType"
service="ISomeType"/>
</components>
</autofac>
但是,通过配置文件,我不知道如何指定事件。
我已经看过通过模块实现OnRelease事件,但我似乎无法访问使其工作所需的一些内部信息。主要在:
registration.Activating += (s, e) =>
{
var ra = new ReleaseAction(() => ReleaseWcfClient(e.Instance));
e.Context.Resolve<ILifetimeScope>().Disposer.AddInstanceForDisposal(ra);
};
在Autofac外部无法使用ReleaseAction
课程。
答案 0 :(得分:2)
Autofac不支持通过XML配置设置事件。你必须在代码中这样做。
但是,您可以通过更交叉的方式执行此操作的一种方法是创建Autofac模块并覆盖AttachToComponentRegistration
方法。在那里,您可以测试每个注册的内容(例如它是否是特定接口的注册)并在那里附加您的Activating
事件处理程序。
There is an example of using AttachToComponentRegistration
on the Autofac wiki显示如何使用此事件连接log4net。
另外两个注释:
UseWcfSafeRelease()
注册扩展。我不知道你的ReleaseWcfClient()
方法在内部做了什么,但如果它的目的是处理来自WCF的可能异常,那么Autofac在UseWcfSafeRelease()
中就是这样。 You can read about that on the wiki。IDisposable
(WCF客户端的方式),那么Autofac将自动跟踪它并处理处理。如果您在Autofac执行处置时想要运行某些特定内容,you'd want to use OnRelease
for the registration。如果它实现IDisposable
并且您想要设置自己的处理解决方案,则需要使用ExternallyOwned()
注册该组件,这样您的组件就不会被双重处理。(我不知道后面这些要点中的任何一个是否适用于此,但我想自从我们来到这个地区以来我一直提高它们。)