从业务层中声明的对象调用网站中声明的对象的静态方法?

时间:2012-07-24 13:19:12

标签: c# interface static-methods

GlobalCache在网站中声明,我在业务层创建另一个需要在GlobalCache上调用方法的对象。由于两者都引用了接口的“契约”程序集,我首先想到的是在“契约”中定义IGlobalCache并使用Ninject在业务层中实例化IGlobalCache来调用该方法。

问题是该方法是静态的,您不能在接口中声明静态方法。如何从一个不知道该方法所属类型的程序集中调用静态方法?

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:1)

您可以在另一个程序集中设置静态类GlobalCache,从您的网站项目或业务项目添加此程序集的引用。你的GlobalCache类是技术类,他必须存在于技术项目中