在设计时支持Unity拦截器

本文关键字:Unity 支持 | 更新日期: 2023-09-27 18:04:13

我如何将这个Unity Fluent API代码"翻译"成XML Design-Time?

container.RegisterType<IRat, Rat>().Configure<Interception()
  .SetInterceptorFor<IRat>(new InterfaceInterceptor()); 

我尝试了这里的代码,但它似乎已经过时了,因为我正在使用最后一个版本的Unity。

在设计时支持Unity拦截器

假设你想用IInterceptionBehavior做拦截,配置看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <assembly name="MyApp"/>
    <namespace name="MyApp"/>
    <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" />
    <container>
      <extension type="Interception"/>
      <register type="MyInterceptor">
        <lifetime type="singleton" />
      </register>
      <register type="IRat" mapTo="Rat">
        <interceptor type="InterfaceInterceptor"/>
        <interceptionBehavior type="MyInterceptor"/>
      </register>
    </container>
  </unity>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
</configuration>

你需要声明一个sectionExtension,然后将intercepeption扩展添加到容器中。然后在注册类型时提供拦截器和interceptionBehavior。如果使用调用处理程序,那么您将添加PolicyInjection行为。