gpt4 book ai didi

c# - 使用Unity拦截所有对IMyInterface.SomeMethod的调用

转载 作者:可可西里 更新时间:2023-11-01 03:07:06 27 4
gpt4 key购买 nike

我正在尝试学习 Unity 拦截器,而且我正在努力学习。

假设我有一个这样的界面:

public interface IMyInterface
{
void SomeMethod();
}

我有未知数量的类实现了这样的接口(interface):

public class SpecificClass1 : IMyInterface
{
public void SomeMethod()
{
Console.WriteLine("Method Called");
}
}

我正在寻找一种方式来表达“对于 IMyInterface 的所有实例(我不想枚举它们),当调用 SomeMethod 时运行我的拦截器。

给我带来麻烦的是类的非枚举。 (如果你能列举出你所有的类,还有很多例子。)

我读过类型拦截,但我似乎无法确定它是否能满足我的需求。

那里有 Unity 专家知道如何做我正在寻找的东西吗?

最佳答案

您可以创建 InterceptionBehavior 然后将其注册到特定类。请注意,您可以通过 IMethodInvocation 输入

过滤 Invoke 中的执行方法
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;
using NUnit.Framework;

namespace UnitTests
{
[TestFixture]
public class ForTest
{
[Test]
public void Test()
{
IUnityContainer container = new UnityContainer().AddNewExtension<Interception>();
container.RegisterType<IMyInterface, SpecificClass1>(
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior<MyInterceptionBehavior>());
var myInterface = container.Resolve<IMyInterface>();
myInterface.SomeMethod();
}
}

public interface IMyInterface
{
void SomeMethod();
}

public class SpecificClass1 : IMyInterface
{
#region IMyInterface

public void SomeMethod()
{
Console.WriteLine("Method Called");
}

#endregion
}

public class MyInterceptionBehavior : IInterceptionBehavior
{
public bool WillExecute
{
get { return true; }
}

#region IInterceptionBehavior

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

public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
IMethodReturn result = getNext()(input, getNext);
Console.WriteLine("Interception Called");
return result;
}

#endregion
}
}

控制台输出

Method Called
Interception Called

更多关于 Interception with Unity

关于c# - 使用Unity拦截所有对IMyInterface.SomeMethod的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11909117/

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