0

GlobalCache は Web サイトで宣言されており、GlobalCache のメソッドを呼び出す必要がある別のオブジェクトをビジネス層に作成しています。どちらもインターフェイスの「コントラクト」アセンブリを参照するため、最初に考えたのは、「コントラクト」で IGlobalCache を定義し、Ninject を使用してビジネス層で IGlobalCache をインスタンス化し、メソッドを呼び出すことでした。

問題は、メソッドが静的であり、インターフェイスで静的メソッドを宣言できないことです。メソッドが属している型を認識していないアセンブリから静的メソッドを呼び出すには、他にどのような方法がありますか?

4

2 に答える 2

2

そのメソッドでインターフェイスを作成し(明らかに非静的)、静的メソッドでクラスを認識しているアセンブリでこのインターフェイスの実装を作成できます。この実装は、静的メソッドを使用してクラスに委譲するだけです。

アセンブリ A (契約) では:

public interface IGlobalCache
{
    void Foo();
}

アセンブリ B (ビジネス) では:

class FooBar
{
    public FooBar(IGlobalCache globalCache) { /*...*/ } // dependency injection
}

アセンブリ C:

class GlobalCacheImpl : IGlobalCache
{
    public void Foo()
    {
        GlobalCache.FooStatic();
    }
}
于 2012-07-24T13:22:42.540 に答える
1

静的クラス GlobalCache を別のアセンブリに設定し、Web サイト プロジェクトまたはビジネス プロジェクトからこのアセンブリへの参照を追加できます。あなたの GlobalCache クラスは技術クラスです。彼は技術プロジェクトに存在する必要があります

于 2012-07-24T13:24:52.523 に答える