The*_*ght 12 static-methods dependency-injection
想象一下,有一个Customer带有实例Load()方法的类.
Load()调用该方法时,它会通过例如检索订单详细信息
var orders = Order.GetAll(customerId, ...);
Run Code Online (Sandbox Code Playgroud)
GetAll()是类的静态方法,Order输入参数是Customer类中定义的字段.
正如您所看到的,Order是Customer类的依赖项,但是,我不能只创建一个IOrder并将其注入,因为接口不能有静态方法.
因此,问题是如何在此示例中引入依赖注入?
我不想创建GetAll()一个实例方法,因为它是一个静态方法,需要保持这种方式.
例如,我在我的设计中使用了实用程序类,其中大多数只包含静态方法.
Pau*_*ips 12
如果必须保留静态方法,我会将静态调用包装在Repository对象中.
像这样:
interface IOrderRepository {
IEnumerable<IOrder> GetAll(customerId, ..);
}
class OrderRepository : IOrderRepository {
IEnumerable<IOrder> GetAll(customerId, ...)
{
Order.GetAll(customerId,...); // The original static call.
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您将此存储库注入您的Customer类.
(我假设你正在这样做,所以你可以在运行时为测试目的注入假的IOrders.我应该说,一般来说,静态方法是测试的一个严重障碍.)
| 归档时间: |
|
| 查看次数: |
14282 次 |
| 最近记录: |