gpt4 book ai didi

c# - 使用 postsharp 在类中调用替代方法

转载 作者:行者123 更新时间:2023-11-30 12:13:50 25 4
gpt4 key购买 nike

我希望能够使用 PostSharp 在我拦截的类上调用不同的方法。

假设我在 PostSharp 方面有以下方法:

    public override void OnInvoke(MethodInterceptionArgs args)
{
if (!m_featureToggle.FeatureEnabled)
{
base.OnInvoke(args);
}
else
{
var instance = args.Instance;
instance.CallDifferentMethod(); //this is made up syntax
}
}

CallDifferentMethod() 是类中被拦截的另一个方法。我可以做一些反射魔术来获得我想要调用的名称,但我不知道如何在类的 this 实例上调用该方法。我不想启动该类的新实例

有什么建议吗?

最佳答案

您是否将 args.Instace 转换为您的类型?根据你写的,我想你的“FeatureEnabled”应该通过一个接口(interface)来定义。

public interface IHasFeature
{
bool IsFeatureEnabled { get; set; }
void SomeOtherMethod();
}

然后使用

((IHasFeature)args.Instance).SomeOtherMethod(); 

然后将方面应用于该界面。

[assembly: MyApp.MyAspect(AttributeTargetTypes = "MyApp.IHasFeature")]

或者直接在界面上

[MyAspect]
public interface IHasFeature

更新:糟糕,Gael 是对的。对于那个很抱歉。使用 CompileTimeValidate 方法在编译时限制方面。

public override bool CompileTimeValidate(System.Reflection.MethodBase method)
{
bool isCorrectType = (Check for correct type here)
return isCorrectType;
}

有关更多信息,请参阅我的帖子 http://www.sharpcrafters.com/blog/post/Day-9-Aspect-Lifetime-Scope-Part-1.aspx

关于c# - 使用 postsharp 在类中调用替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973429/

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