.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-3 – MVC3:如何在HtmlHelper扩展中以编程方式
- asp.net – 基于Web的可视化查询构建器
- asp.net-web-api – 尝试从asp.net web api自主主机中获取用
- asp.net – 为什么IIS7需要很长时间
- asp.net-mvc – MVC WebApi不使用AutofacWebApiDependencyR
- 实体框架 – 在每个单元测试之前重新创建和重新设置LocalDb
- asp.net-mvc-2 – 使用或不使用AutoMapper的“合并”模型和
- asp.net-mvc – Asp.net Web api异常仅在IIS部署之后:名为
- asp.net – 如何获取SignalR用户连接ID在外线中心类?
- asp.net – 在localhost中将IIS设置为Web开发服务器
