Wcf 试图在通过配置文件注册的组件上设置OnRelease事件
我正在通过配置文件注册需要在发布时进行特殊处理的组件(即WCF客户端)Wcf 试图在通过配置文件注册的组件上设置OnRelease事件,wcf,autofac,Wcf,Autofac,我正在通过配置文件注册需要在发布时进行特殊处理的组件(即WCF客户端) <autofac> <components> <component type="SomeType" service="ISomeType"/> </components> </autofac> 但是,通过配置文件,我不知道如何指定事件 我已经研究过通过模块实现OnRelease事件,但我似乎无法访问使其工作所需的一些
<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);
};
registration.Activating+=(s,e)=>
{
var ra=newreleaseaction(()=>ReleaseWcfClient(e.Instance));
e、 Context.Resolve().Disposer.AddInstanceForDisposal(ra);
};
在Autofac之外,
ReleaseAction
类不可用。Autofac不支持通过XML配置设置事件。您必须在代码中执行此操作
但是,一种更具交叉性的方法是创建Autofac模块并覆盖AttachToComponentRegistration
方法。在那里,您可以测试每个注册的内容(比如它是否是特定接口的注册),并将激活事件处理程序附加到那里
显示如何使用此事件连接log4net
其他两项说明:
您可能有兴趣为WCF客户端代理使用UseWcfSafeRelease()
注册扩展。我不知道您的ReleaseWcfClient()
方法在内部做什么,但如果它的目的是处理来自WCF的可能异常,Autofac在UseWcfSafeRelease()
中有这一点李>
如果组件实现了IDisposable
(WCF客户端的方式),则Autofac将自动跟踪它并处理处置。如果要在Autofac执行处置时运行某些特定的操作。如果它实现了IDisposable
,并且您想要设置自己的处置解决方案,那么您需要使用ExternallyOwned()
注册组件,这样您的组件就不会被双重处置
(我不知道后几点是否适用于这里,但我想我会提出它们,因为我们在该地区。)我最终使用一个模块将OnRelease代码添加到实现ICommunicationObject的任何东西中。
ReleaseWcfClient
与UseWcfSafeRelease
代码几乎相同,但在与我们的客户合作时略有不同。