我有一个 3 层应用程序,各层是:
- Web:表示层 (ASP.NET MVC) --> 只能看到 BLL
- BLL:业务逻辑层-->只看到DAL
- DAL:数据访问层
So the Web
图层对我的一无所知DAL
层。我的存储库接口和具体类DAL
,它们用于BLL
业务逻辑类中的层。问题是,为了解耦DAL
and BLL
,如何设置 Ninject 将我的存储库实现注入到BLL
layer?
同样的问题是针对Web
层和BLL
层,我有接口和实现BLL
我用它们Web
层,我应该如何为此设置 Niject?
这个想法是为 DAL 和 BLL 定义接口。然后,您可以将此类接口的实例作为构造函数参数。例子
interface IDatabase
{
// Methods here
}
您的 BLL 课程:
public class Bll
{
IDatabase _db;
public Bll(IDatabase db)
{
_db = db;
}
public void SomeMethod()
{
// Use db here
}
}
然后在您的组合根目录(在 Web 应用程序中)中,您使用内核来配置这些依赖项:
kernel.Bind<IDatabase>().To<ConcreteDatabase();
从控制器到 BLL,您需要相同的东西,但其工作方式相同。
除此之外,我认为您的依赖项设置不正确。一般来说,您不需要这些垂直依赖性。您应该以更扁平的层次结构为目标。我写了一篇关于此的博客文章:http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/ http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/
在我的博客文章中,我解释了这种层次结构的问题所在以及如何避免它。除此之外,它准确地描述了您的问题:ASP.NET MVC、BLL、DLL 和 Ninject 将其捆绑在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)