4

我希望能够通过使用在我截获的类上调用不同的方法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()是类中另一个被拦截的方法。我可以做一些反射魔法来获得我想要被调用的名称,但我不知道如何在这个类的实例上调用该方法。我不想启动该类的新实例

有什么建议么?

4

1 回答 1

3

您是否将 args.Instace 转换为您的类型?根据您写的内容,我想您的“FeatureEnabled”应该通过接口定义。

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

然后使用

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

然后将方面应用到该接口。

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

或者直接在界面上

[MyAspect]
public interface IHasFeature

更新:哎呀,盖尔是对的。对于那个很抱歉。使用 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

于 2012-06-11T00:40:09.487 回答