用通用接口来解决依赖注入的具体类是一个好的设计吗?

时间:2018-09-10 19:38:29

标签: c# .net design-patterns dependency-injection generic-programming

拥有通用接口来实现Concrete类并使用通用接口在容器中解析是一个好模式。
我担心的是它是否违反了“单一责任”原则,还是紧密结合了实施。

例如

  //Base Generic Interface
  public interface IBaseServiceCrud<T>
    {
    T Get(string key);
    bool Create (T entity);
    bool Delete(T Entity);
    }

   // Implement Concrete Class with Base Interface 
    public class Order : IBaseServiceCrud<Order>
    { }
    public class Product: IBaseServiceCrud<Order>
    { }


   //Or Should we have a interface specific to each service
   public interface IOrder: IBaseServiceCrud<Order>
   {}

 //And then Implement by Concrete Class
  public class Order : IOrder
  {}

在DI容器支持解析通用接口中,但我担心的是基于通用接口进行解析的良好实践。

1 个答案:

答案 0 :(得分:1)

以这种方式实现存储库模式并不罕见,并且您这样做不会有任何问题(另请参见Repository Pattern Standardization of methods)。

对于依赖项注入,这并不重要,只要您的依赖项注入框架支持即可。依赖项注入的目的是要清楚类的依赖关系,并且使用通用接口并不能避免这种情况。