Ash*_*kan 14 c# asp.net-mvc dependency-injection ninject asp.net-mvc-4
我有一个3层应用程序,图层是:
因此该Web图层对我的DAL图层一无所知.我有我的存储库接口和具体类DAL,它们BLL在业务逻辑类的层中使用.现在的问题是,为了分离DAL和BLL,我怎么设置Ninject注入我的仓库实现的BLL层?
同样的问题是Web层和BLL层,我有BLL我在Web层中使用它们的接口和实现,我应该如何为此设置Niject?
我们的想法是为您的DAL和BLL定义接口.然后,您将此类接口的实例作为构造函数参数.例
interface IDatabase
{
// Methods here
}
Run Code Online (Sandbox Code Playgroud)
你的BLL课程:
public class Bll
{
IDatabase _db;
public Bll(IDatabase db)
{
_db = db;
}
public void SomeMethod()
{
// Use db here
}
}
Run Code Online (Sandbox Code Playgroud)
然后在组合根(在Web应用程序中)中使用内核来配置这些依赖项:
kernel.Bind<IDatabase>().To<ConcreteDatabase();
Run Code Online (Sandbox Code Playgroud)
从控制器到BLL需要相同的东西,但它的工作方式相同.
除此之外,我认为你的依赖关系没有正确设置.通常,您不希望这些垂直依赖项.你应该瞄准更平坦的等级制度.我写了一篇关于此的博客文章:http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/
在我的博客文章中,我解释了这种层次结构的问题是什么以及如何避免它.除此之外,它描述了你的问题:ASP.NET MVC,BLL,DLL和Ninject将它们联系在一起.
我们在企业级应用程序中也遇到了这个问题.如何使用业务和数据层中的类加载依赖项注入引擎,而无需从Web应用程序创建对业务和数据层的硬引用.我们最初玩了一些设计并提出了这个非常成功的设计,到目前为止我们已经为我们工作了18个月并且表现非常好.
在Web应用程序的ninjectwebcommon文件中,使用反射来访问业务和数据层,以便您可以加载所需的一切
像这样:
System.Reflection.Assembly assembly;
assembly = System.Reflection.Assembly.Load("our.biztier");
kernel.Load(assembly);
assembly = System.Reflection.Assembly.Load("our.datatier");
kernel.Load(assembly);
Run Code Online (Sandbox Code Playgroud)
Ninjects"Load"方法查找程序集中继承ninject类"NinjectModule"的任何类,然后调用它将所有内容加载到内核中.
因此,我们的业务和数据层都包含一个简单的注入类,我们用它来加载所有内容.
public class InjectionModuleBiz : NinjectModule
{
public override void Load()
{
Kernel.Bind<ICustomerBiz>().To<CustomerBiz>().InRequestScope();
Kernel.Bind<IEmployeeBiz>().To<EmployeeBiz>().InRequestScope();
}
}
Run Code Online (Sandbox Code Playgroud)
我们在数据层中有另一个injectModule类
public class InjectionModuleData : NinjectModule
{
public override void Load()
{
Kernel.Bind<ICustomerData>().To<CustomerData>().InRequestScope();
Kernel.Bind<IEmployeeData>().To<EmployeeData>().InRequestScope();
}
}
Run Code Online (Sandbox Code Playgroud)
最终结果是我们的所有业务层和数据层类都加载到我们的ioc容器中,并且可以在任何地方注入.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
9557 次 |
| 最近记录: |