我怎样才能解耦这个项目

How can i decouple this project

我有一个场景,我的业务层以 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 的业务层中有一个 class:

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 并只解决存储库依赖性,我是否必须在业务层中定义存储库接口才能执行此操作?

您的业务层(dll) 依赖于您的数据访问层(dll)

您需要使用接口从数据访问实现中抽象出业务层契约

在启动项目中使用 DI 将允许您将所需的实现注入该接口

您的业务层在数据访问层中始终具有物理依赖性,但在数据访问实现中不会具有依赖性。