我怎样才能解耦这个项目
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 将允许您将所需的实现注入该接口
您的业务层在数据访问层中始终具有物理依赖性,但在数据访问实现中不会具有依赖性。
我有一个场景,我的业务层以 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 将允许您将所需的实现注入该接口
您的业务层在数据访问层中始终具有物理依赖性,但在数据访问实现中不会具有依赖性。