拥有通用接口来实现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容器支持解析通用接口中,但我担心的是基于通用接口进行解析的良好实践。
答案 0 :(得分:1)
以这种方式实现存储库模式并不罕见,并且您这样做不会有任何问题(另请参见Repository Pattern Standardization of methods)。
对于依赖项注入,这并不重要,只要您的依赖项注入框架支持即可。依赖项注入的目的是要清楚类的依赖关系,并且使用通用接口并不能避免这种情况。