gpt4 book ai didi

c# - 在不使用容器的情况下从配置中统一拦截

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:09 25 4
gpt4 key购买 nike

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

我的代码:

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 的实例,然后将检查它是否需要被代理以及它需要哪些拦截器...

当然,也有异常(exception)。如果你使用编织(FodyPostSharp),你可以在不使用动态代理的情况下执行 AOP。然后,你实际上可以做 new Calculator()它将有它的方面,而不仅仅是它的核心实现......

关于c# - 在不使用容器的情况下从配置中统一拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25744091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com