如何修改处理拦截行为实例的方式?
我的工作是: - regster具有单身生命周期的类型 - 添加基于接口的拦截 - 添加自定义拦截行为
现在,每次解析类型时,实例都是相同的。但是重新创建了拦截行为。同时将实例与Equals进行比较也会失败。
这是我得到的:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" />
<container>
<extension type="Interception" />
<register type="MyInterfaces.IMyItf, MyInterfaces" mapTo="MyLib.Impl1, MyLib">
<lifetime type="singleton" />
<interceptor type="InterfaceInterceptor"/>
<interceptionBehavior type="MyInterceptionBehavior, MyUnityExt" />
</register>
</container>
</unity>
所以我要么需要 MyInterceptionBehavior 的单例实例(或每个已解析单例的一个实例)。
任何建议?
答案 0 :(得分:2)
要注册单个CallHandler,您需要在注册时向其传递ContainerControlledLifetimeManager实例,如下所示:
container.RegisterType<TestHandler>(new ContainerControlledLifetimeManager());
container.AddNewExtension<Interception>().AddCallHandler(container.Resolve<TestHandler>());
修改强>
通过app.config:
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="IExample" type="LifetimeManagement.IExample, LifetimeManagement" />
<alias alias="Example" type="LifetimeManagement.Example, LifetimeManagement" />
<container name="container">
<extension type="Interception" />
<interceptor type="InterfaceInterceptor" /> <register type="IHandler" mapTo="MyTestHandler">
<lifetime type="singleton" />
</register>
</container>