我有一个场景,我的业务层以dll的形式直接引用到我的数据库层,该数据库层充当此项目中的存储库,现在这意味着需要直接依赖数据库层解耦,请看下面的结构:
我知道如何使用DI和容器,但是我想要一些提示以及如何以某种形式将其解耦而无需在业务层中添加IRepository接口,并且数据库层具有调用irepository的具体存储库业务层。这是否有意义。
我有一个存储库接口,位于Database_Layer dll:
public interface IRepository
{
Task Add(Object item);
Task Remove(int id);
Task<Object> Find(int id);
Task UpdateAsync(Object item);
Task<IEnumerable<Object>> GetAllAsync();
Task<IEnumerable<Object>> GetAllAsync(Object id);
}
然后我在业务层中有一个名为ContentPanel的类:
using Database_Layer.Interfaces;
namespace Business_Tier.Concrete
{
public class ContentPanel : IPanel
{
IRepository _repository;
public ContentPanel(IRepository repo)
{
this._repository = repo;
}
public IResolver _Resolver { get; set; } = null;
public IResolver Resolver { get => _Resolver; set => _Resolver.Resolve<IRepository>("ContentRepository",_repository); }
public void Delete_Content_Panel(int id)
{
}
}
我想消除使用引用database_layer.interfaces并只解决存储库依赖性,我是否必须在Business层中定义存储库接口,以便执行此操作?
答案 0 :(得分:1)
您的业务层(dll)依赖于您的数据访问层(dll)
您需要使用接口从数据访问实现中抽象业务层合同
在启动项目中使用DI将允许您将所需的实现注入该接口
您的业务层在数据访问层中始终具有物理依赖关系,但在数据访问实现中不具有依赖关系。