任何其他方法调用之前的自动方法调用

时间:2013-08-08 19:25:17

标签: c# inheritance n-tier-architecture

我有大量继承自大量接口的类。这些类正在实现的接口不共享任何常用方法,但它们都共享一个共同的第一步。举例说明如下:

A类看起来像这样:

class A : InterfaceA
{

    GetFoo(Database db)
    {
       PerformSetup(db); // This is the common first step.

       // Do foo things
    }
}

B类看起来像这样:

class B : InterfaceB
{
    GetBar(Database db)
    {
        PerformSetup(db); // This is the common first step.

        // Do bar things
    }
}

现在显然我可以使用方法PerformSetup创建一个基类,并让所有这些方法调用它。但我的问题是非常许多方法,并且对PerformSetup()的调用需要在所有这些方法中,但它们中的任何一个都没有。

所以我当然可以将设置代码复制粘贴到每个方法的开头,但为了DRY和我自己的时间,我想知道是否有某种方法可以确保自动调用此方法在任何(仅限公众)方法调用之前?我可以以某种方式利用事件吗?请记住,没有类共享一个公共接口,并且许多这些接口方法除了Database参数之外还有参数,但它们都有数据库参数。

这可能有点奇怪,但我总是很想知道人们能够在C#中安装什么疯狂的装置。

1 个答案:

答案 0 :(得分:1)

两个可能的答案:

  1. 使用PostSharp。它的成本,但我认为它的确有效。
  2. 您可以在调用方法之前使用反射调用PerformSetup方法
  3. 基本上,您可以使用以下

    创建基类
    class Base
    {
        public void InvokeMethodWithSetup(string method, Database db, params object[] args)
        {
            PerformSetup(db);
            var method = this.GetType().GetMethod(method);
            method.Invoke(this, args);   
        }
    
        public void PerformSetup(Database db)
        {
            // stuff
        }
    }
    

    这很遗憾地意味着到处都会调用你的一个方法来替换调用代码,所以我不知道这是否会使它更容易,但至少它可以节省你必须修改所有方法。