在不使用容器的情况下从配置中截取统一
本文关键字:配置 截取 情况下 | 更新日期: 2023-09-27 18:21:08
嗨,我
正在尝试使用统一拦截(我不想使用 Unity 容器(。我可以配置运行时,但不知道如何从配置中配置它。
我的代码:
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();
}
这是有效的。我需要从配置文件配置它。请帮忙
如果没有容器,则必须自己执行代理实例化。这是Intercept.ThroughProxy<>
电话。如果您使用的是另一个容器,则可以扩展它以读取配置并相应地处理它。
但是,您可以让 .net/unity 读取配置文件并执行new Calculator()
,Calculator
就会使用配置文件中定义的拦截器进行代理和拦截,这没有什么神奇的。 new
无法扩展来处理这个问题,因此总会有一些组件你必须要求一个ICalculator
实例,然后它会检查它是否需要代理以及它需要哪些拦截器......
当然,这有一个例外。如果您使用编织(Fody,PostSharp(,则可以在不使用动态代理的情况下进行AOP。然后,你实际上可以做new Calculator()
它将具有它的方面,而不仅仅是它的核心实现......