0

GlobalCache 在网站中声明,我正在业务层中创建另一个对象,该对象需要调用 GlobalCache 上的方法。由于两者都引用了一个“Contract”接口的组装,我的第一个想法是在“Contract”中定义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,从您的网站项目或业务项目中添加对该程序集的引用。您的 GlobalCache 类是技术类,他必须存在于技术项目中

于 2012-07-24T13:24:52.523 回答