强制客户端代码调用Service类而不是Repository类

时间:2017-04-28 15:44:25

标签: c# service repository

我正在使用架构客户端代码--->商业服务--->库中。

存储库类实现IRepository接口,而Service类将IRepository作为客户端代码传递给它的构造函数中的参数。

现在问题是,客户端代码是否应该能够直接调用存储库类,只是实例化它以将其传递给服务类?在我看来,客户端代码应该能够通过服务类调用存储库类函数 ONLY ,这些服务类在调用存储库之前应用业务规则。因为直接调用存储库类而不通过业务层将根据域业务规则简单地导致无效数据。

但问题是如何防止客户端代码直接调用存储库中的方法,同时根据抽象的IRepository接口保留服务类。换句话说,我需要使客户端代码能够实例化存储库类,然后将它们传递给服务类,但同时无法直接调用存储库类中的方法。

1 个答案:

答案 0 :(得分:0)

理想情况下,ClientCode不应该了解IRepository或其实现。这可以通过控制反转(IoC)容器来完成。

IoC Container将为您IRepository注入Service的实施,而不会让客户端代码知道IRepository或其实现。这样,您就可以在服务中保留依赖注入,而无需打开IRepository界面和ClientCode的实现。

对于C#,IoC容器的两个示例是AutoFacNinject