2012-07-24 45 views
0

GlobalCache在网站中声明,我正在业务层中创建另一个需要调用GlobalCache方法的对象。既然这两个引用了一个“契约”接口程序集,我的第一个想法是在“契约”中定义IGlobalCache,并使用Ninject在业务层中实例化IGlobalCache以调用该方法。对在业务层中声明的对象在网站中声明的对象调用静态方法?

问题是该方法是静态的,并且您不能在接口中声明静态方法。你还可以从不知道方法所属类型的程序集中调用静态方法吗?

回答

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

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

+0

不幸的是,我将无法将GlobalCache移动到另一个项目。 – adam0101 2012-07-24 13:30:29