asp.net-mvc – 如何告诉Ninject绑定到它没有引用的实现
我在我的ASP.NET MVC3项目中使用
NinjectMVC3.
我有3层 > Foo.Web Foo.Web引用Foo.Services但不引用Foo.Data.我的一个服务看起来像这样 public class FooService : IFooService { private readonly IFooRepository _fooRepository; public FooService(IFooRepository fooRepository) { _fooRepository = fooRepository; } // ... } NinjectMVC3在Foo.Web启动时执行此引导方法 private static void RegisterServices(IKernel kernel) { kernel.Bind<IFooService>().To<FooService>(); kernel.Bind<IFooRepository>().To<FooRepository>(); // Foo.Web doesn't know what FooRepository is } 如何从Foo.Web注入FooServices依赖项? 解决方法
为了让你指向正确的方向,我建议你看看
onion architecture.
它的基本前提是任何代码都可以依赖于更加集中的层.在您的场景中(对于使用Repository模式的MVC3应用程序而言,它是常见的),您的UI应该具有对服务层的引用,并且可以接受对数据层的引用. 如果你愿意接受(如果你来自经典的N层设置,这是一个难以吞咽的药丸,我知道),那么你的情况变得更加简单. 使用Ninject,您现在可以执行以下操作: 在您的NinjectMVC3.cs文件中,您的CreateKernel变为 /// <summary> /// Creates the kernel that will manage your application. /// </summary> /// <returns>The created kernel.</returns> private static IKernel CreateKernel() { var modules = new INinjectModule[] { new ServiceDIModule(),new RepositoryDIModule() }; var kernel = new StandardKernel(modules); //RegisterServices(kernel); <-- Only if you have some custom binding // that are UI specific return kernel; } 现在,在您的服务层中,添加对Ninject的引用(通过NuGet只是简单的Ninject,而不是通过NuGet的MVC3 dropin),并添加我在ServiceDIModule上面调用的内容,如下所示: using Ninject.Modules; namespace MyServiceLayer { public class ServiceDIModule : NinjectModule { public override void Load() { //Bind Services Bind<IPracticeService>().To<PracticeService>().InRequestScope(); } } } 并重复相同的数据层注入过程(UnitofWork,DatabaseFactory,IFooRepository等) namespace MyDataLayer { public class RepositoryDIModule : NinjectModule { public override void Load() { //Bind Repos Bind<IFooRepository>().To<FooRepository>().InRequestScope(); } } } 现在,您可以预先访问所需的所有绑定.所以,你对我的问题实际上归结为思维的转变.如果您可以接受(不情愿或其他方式)洋葱概念,您的方案将干净利落地解决. 您还可以查看Project Silk和CodeCampServer.它们都在某种程度上实现了“洋葱”概念(Silk肯定,我现在正在寻找解决方案,UI web项目包含对包含所有回购) 让我知道你的想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Knockout.js&复选框列表:发布到mvc控制
- asp.net-mvc – ASP.NET MVC DDD应用程序中的组合根
- 如何使用ASP.NET Core自定义Tag Helper中的视图?
- asp.net – 如何测试开发机器上的子域? abc.localhost
- msbuild – 通过TFS 2015部署ASP.NET 5(vNext)
- asp.net-mvc – 在MVC Razor中,如何在子布局下面定义一个Re
- asp.net-mvc – 自动发现automapper配置
- asp.net-mvc-4 – OAuth2和DotNetOpenAuth – 实现Google自
- angularjs_百度地图API_根据经纬度定位_示例
- asp.net-mvc – @Model和@model之间的区别
- ASP.NET:请求cookie对于域名为null?
- asp.net – 使用MvcBuildViews构建Razor = true失
- asp.net-mvc-3 – 尝试加载64位C/C++LI程序集时出
- 坚石诚信ETz201应用于ASP.NET项目中
- asp.net-mvc-2 – Asp.net MVC标签
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ex
- asp.net-mvc – asp.net mvc错误处理的最佳做法
- asp.net-core – 具有Attributes的基于IP的授权策
- ASP.NET MVC自定义授权
- asp.net-mvc – “后退”按钮和防伪令牌