不使用容器从配置中统一拦截

时间:2014-09-09 11:59:27

标签: c# unity-container ioc-container unity-interception

您好我正在尝试使用统一拦截(我不想使用统一容器)。 我能够配置运行时但不知道如何从config配置它。

我的代码:

public interface ICalculator
{
    int Add(int first, int second);

    int Multiply(int first, int second);
}

行为:

  internal class LogBehavior : IInterceptionBehavior 
    {
        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            // My Code
            IMethodReturn result = getNext()(input, getNext);
            return result;
        }

        public IEnumerable<Type> GetRequiredInterfaces()
        {
            return Type.EmptyTypes;
        }

        public bool WillExecute {
            get { return true; }
        }
    }

这就是我的称呼方式

    public static void Main(string[] args)
    {

        var calculator = new Calculator();
        var calculatorProxy = Intercept.ThroughProxy<ICalculator>(calculator,
          new InterfaceInterceptor(), new[] { new LogBehavior() });
        Console.WriteLine(calculatorProxy.Add(2, 2));

        Console.ReadKey();
    }

这很有效。我需要从配置文件配置它。 请帮忙

1 个答案:

答案 0 :(得分:0)

如果没有容器,您必须自己进行代理实例化。这是Intercept.ThroughProxy<>电话。如果你正在使用另一个容器,你可以扩展它以读取配置并相应地处理它。

但是你可以只有.net / unity读取配置文件并且new Calculator()Calculator代理和拦截配置中定义的拦截器是没有魔力的。文件。 new无法扩展以处理该问题,因此总会有一些组件您必须要求ICalculator的实例,然后检查是否需要被代理以及它需要哪些拦截器......

当然,这是一个例外。如果您使用编织(FodyPostSharp),则可以在不使用动态代理的情况下执行AOP。然后,你实际上可以做new Calculator()并且它将具有它的方面,而不仅仅是它的核心实现...