Unity - 拦截实例处理

时间:2014-04-17 11:42:55

标签: c# unity-container

如何修改处理拦截行为实例的方式?

我的工作是: - 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 的单例实例(或每个已解析单例的一个实例)。

任何建议?

1 个答案:

答案 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>