您好我正在尝试使用统一拦截(我不想使用统一容器)。 我能够配置运行时但不知道如何从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();
}
这很有效。我需要从配置文件配置它。 请帮忙
答案 0 :(得分:0)
如果没有容器,您必须自己进行代理实例化。这是Intercept.ThroughProxy<>
电话。如果你正在使用另一个容器,你可以扩展它以读取配置并相应地处理它。
但是你可以只有.net / unity读取配置文件并且new Calculator()
和Calculator
代理和拦截配置中定义的拦截器是没有魔力的。文件。 new
无法扩展以处理该问题,因此总会有一些组件您必须要求ICalculator
的实例,然后检查是否需要被代理以及它需要哪些拦截器......
当然,这是一个例外。如果您使用编织(Fody,PostSharp),则可以在不使用动态代理的情况下执行AOP。然后,你实际上可以做new Calculator()
并且它将具有它的方面,而不仅仅是它的核心实现...