.net – 洋葱建筑中的依赖性解析
Onion Architecture是一种构建应用程序的方式,以保持关注和松散耦合的分离(示例项目为:
http://onionarch.codeplex.com/).依赖注入/分辨率是此架构的关键方面,因为它用于将所有图层绑定在一起.
上述链接包含一个关于如何使用洋葱分层结构化ASP.NET MVC的示例应用程序.我真的很喜欢,但大多数这些例子使用Ninject(我们都知道这是很慢).我想知道如果有人可能会将如何将不同的DI工具(如SimpleInjector,Unity或Autofac)集成到一个洋葱项目中. 所有图层只有1个依赖关系(包括MVC项目),即核心层是关键.除了“依赖关系分辨率”层,此图层可以引用所有图层. 我很难将MVC项目设置为启动项目,使用DI,而不包括对MVC层中的DI工具的引用. 解决方法
你的问题是
我使用StructureMap而不是Ninject,它的集成方式应该适用于任何其他DI框架. 如您所说,只有依赖关系分辨率层才能引用所有其他层,它是您的洋葱架构的最外层.那么这样做,我创建了一个名为BootStrapper的项目.这是我引用StructureMap程序集的唯一项目. [assembly: WebActivator.PreApplicationStartMethod(typeof(XXXX.BootStrapper.App_Start.StructuremapMvc),"Start")] namespace XXXX.BootStrapper.App_Start { public static class StructuremapMvc { public static void Start() { IContainer container = IoC.Initialize(); System.Web.Mvc.DependencyResolver.SetResolver(new StructureMapDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new StructureMapHttpDependencyResolver(container); ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory()); } } } 有趣的是: [assembly: WebActivator.PreApplicationStartMethod(typeof(XXXX.BootStrapper.App_Start.StructuremapMvc),"Start")] 根据矿块包的描述:
很酷啊,是吗最后一件事是确保将BootStrapper项目程序集推送到您的Web应用程序的/ bin文件夹(使用后期构建操作或OutputTo块)易于设置).这将避免您引用您的MVC项目中的BootStrapper项目并破坏洋葱架构原理. 所以,所有这一切,它完全符合Composition Root Pattern,当你的应用程序开始,模块将组合在一起. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC3中Textbox的水印
- asp.net – 如何从相同的解决方案的MVC项目调试Web API项目
- asp.net – 使用JQuery从viewstate获取值?
- asp.net-mvc – 如何添加日志到MVC4 WebApi
- asp.net-mvc – ASP.net MVC RTM测试命名约定
- asp.net – GridView RowUpdating无法获取新值
- asp.net-mvc-4 – 如何在ASP.NET MVC 4中使用免费的CSS模板
- asp.net – 我需要将.compiled文件复制到生产服务器?
- asp.net-mvc – 从MVC剃刀模型调用Bootstrap 3 Modal?
- asp.net – GCFrame在WinDBG中输出!clrstack命令意味着什么
- asp.net-mvc – ASP.NET MVC和Unity 1.2容器问题
- asp.net – 双回发问题
- ASP.NET – jQuery ajax调用队列而不是并发运行?
- asp.net – 服务器端检测页面显示在IFrame中
- asp.net-mvc – 如何在ASP.NET MVC中实现分页?
- asp.net-web-api – 如何在Web Api调用期间获取用
- asp.net-mvc – 路由是在我的区域中找到控制器,但
- 一个最简单的通过自定义注解形式实现AOP的例子
- asp.net-mvc – 使用下拉列表过滤MVC中的结果
- 加载ASP.Net MVC JSONResult jQuery DataTables