【发布时间】:2018-03-02 12:02:23
【问题描述】:
我有一个场景,我的业务层以 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 的使用引用并仅解决存储库依赖关系,我是否必须在业务层中定义存储库接口才能做到这一点?
【问题讨论】:
-
你对 DI 的工作原理以及为什么接口在这里很重要没有清晰的理解。如果您有任何使用具体类进行 DI 的想法,请尝试实现它并告诉我们您在其中遇到什么问题。
-
解耦并不一定意味着删除整个引用 - 此时您正在查看插件等,这完全是另一个主题。
-
但是业务层直接依赖于数据库层,你不同意吗?
标签: c# asp.net asp.net-mvc dependency-injection decoupling