相关疑难解决方法(0)

为什么静态类不能实现接口?

可能重复:
为什么C#不允许静态方法实现接口?

在我的应用程序中,我想使用一个将执行原始数据访问的存储库(TestRepository,SqlRepository,FlatFileRepository等).因为这样的存储库将在我的应用程序的整个运行时间中使用,所以对我来说这是一个明智的事情,让它成为一个静态的类,所以我可以去

SqlRepository.GetTheThingById(5);
Run Code Online (Sandbox Code Playgroud)

没有它必须一直重生.因为我希望我的存储库可以互换,所以我想它们实现一个通用接口:IRepository.但是当我尝试这样做时,我明白了

"Static classes cannot implement interfaces"
Run Code Online (Sandbox Code Playgroud)

他们为什么不能?你怎么建议我改变我的设计呢?有没有我可以使用的模式?

更新
五年后:这个问题被访问了20k +次,我了解了存储库模式的缺点,了解了IoC,并意识到我的问题制定得很差.

我真的不是在问接口的C#规范是什么,而是为什么它故意以这种特定的方式限制我.

实际的答案是,在实例或类型上调用方法的语法是不同的.但这个问题已经结束了.

.net c#

96
推荐指数
3
解决办法
6万
查看次数

如何使用静态方法的依赖注入?

想象一下,有一个Customer带有实例Load()方法的类.

Load()调用该方法时,它会通过例如检索订单详细信息

var orders = Order.GetAll(customerId, ...);
Run Code Online (Sandbox Code Playgroud)

GetAll()是类的静态方法,Order输入参数是Customer类中定义的字段.

正如您所看到的,OrderCustomer类的依赖项,但是,我不能只创建一个IOrder并将其注入,因为接口不能有静态方法.

因此,问题是如何在此示例中引入依赖注入?

我不想创建GetAll()一个实例方法,因为它是一个静态方法,需要保持这种方式.

例如,我在我的设计中使用了实用程序类,其中大多数只包含静态方法.

static-methods dependency-injection

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

dependency-injection ×1

static-methods ×1