我怎样才能解开这个项目

问题描述 投票:1回答:1

我有一个场景,我的业务层以dll的形式直接引用到我的数据库层,该数据库层充当此项目中的存储库,现在这意味着对数据库层有直接依赖性,需要解耦,请见下面的结构:

Project Structure between Business layer and Database Layer Business layer directly referring to database

我知道如何使用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层中定义存储库接口,以便执行此操作?

c# asp.net asp.net-mvc dependency-injection decoupling
1个回答
1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.