Unity拦截和拦截类实现的多个接口

时间:2017-02-08 10:19:38

标签: c# unity-container interceptor

如何使用unity来发出实现装饰依赖的所有接口的装饰器?

Unity允许创建构建感知依赖项。这是通过实施IBuildAware界面并使用BuilderAwareExtension在其内部转换为IBuildAware来完成的。

问题在于,当使用拦截装饰器时,除了已注册的装置之外,它不会实现任何接口。

public interface IFoo
{
    void Bar();
}

public class Foo : IFoo, IDisposable
{
    public void Bar()
    {
        throw new Exception();
    }

    public void Dispose()
    {
    }
}


container.RegisterType<IFoo, Foo>(
    new InterceptionBehavior<PolicyInjectionBehavior>(),
    new Interceptor<InterfaceInterceptor>());

因此Unity不会调用DisposeOnBuiltUp / OnTearingDown方法。

更新
此拦截器也不会镜像应用于它们属性的公共属性/方法。这可能会破坏使用反射的自定义扩展 TransparentProxyInterceptor没有这些问题,但它会严重影响性能。

更新2: Related question关于TransparenProxyInterceptor

如何统一发出实现所有接口的装饰器并完全镜像装饰依赖的公共成员?

0 个答案:

没有答案