dependency-injection – 如何使用ASP.NET MVC 3 RTM配置依赖项
发布时间:2020-12-16 07:31:32 所属栏目:asp.Net 来源:网络整理
导读:我正在将一个Web应用程序从ASP.NET 3 Preview 1升级到RTM,我对更新的依赖注入方法感到困惑.我正在使用StructureMap,但这与我的问题无关.以前我需要做的就是如下: x.ForIControllerFactory().UseDefaultControllerFactory();x.ForIServiceLocator().Use(MvcS
我正在将一个Web应用程序从ASP.NET 3 Preview 1升级到RTM,我对更新的依赖注入方法感到困惑.我正在使用StructureMap,但这与我的问题无关.以前我需要做的就是如下:
x.For<IControllerFactory>().Use<DefaultControllerFactory>(); x.For<IServiceLocator>().Use(MvcServiceLocator.Current); 现在看起来我需要提供IControllerActivator,IViewPageActivator和ModelMetadataProvider的实现,因为否则我从StructureMap收到错误,因为MVC尝试使用依赖项解析器来定位它们.从MVC源看,似乎没有公共默认实现.我在设置这些内容时遗漏了什么?当然这些应该按惯例配置? 需要配置什么以及如何使用StructureMap的例子.作为参考,我目前使用以下丑陋的kludge迫使MVC使用其内部默认值: x.For<IControllerFactory>().Use<DefaultControllerFactory>(); x.For<IDependencyResolver>().Use(() => DependencyResolver.Current); x.For<IControllerActivator>().Use(() => null); x.For<IViewPageActivator>().Use(() => null); x.For<ModelMetadataProvider>().Use(ModelMetadataProviders.Current); 编辑:为了清楚我有一个工作的依赖性解析器的StructureMap实现 – 问题是为什么MVC抱怨所有这些接口没有在容器中配置. 解决方法
通过创建依赖性解析器(IDependencyResolver)类,然后在global.asax中注册该类,我能够使StructureMap与ASP.NET MVC3一起工作.我还没有完全测试这段代码.但是,它在两个应用程序中一直没有任何问题.
StructureMapDependencyResolver.cs using System.Linq; using System.Web.Mvc; using StructureMap; namespace SomeNameSpace { public class StructureMapDependencyResolver : IDependencyResolver { private readonly IContainer container; public StructureMapDependencyResolver(IContainer container) { this.container = container; } public object GetService(System.Type serviceType) { try { return this.container.GetInstance(serviceType); } catch { return null; } } public System.Collections.Generic.IEnumerable<object> GetServices(System.Type serviceType) { return this.container.GetAllInstances<object>() .Where(s => s.GetType() == serviceType); } } } 的Global.asax.cs public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); DependencyResolver.SetResolver(new StructureMapDependencyResolver(InitContainer())); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } private static IContainer InitContainer() { ObjectFactory.Initialize(x => { x.Scan(y => { y.WithDefaultConventions(); y.AssembliesFromApplicationBaseDirectory(); y.LookForRegistries(); }); }); return ObjectFactory.Container; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – 如何将HostBuilder用于WebJob?
- asp.net-mvc-4 – VS2012 RTM缺少.net 4.5和mvc项目模板
- asp.net – DataBinding Eval到2个小数位置不显示0
- ASP.NET MVC3 Razor – 如何有条件地退出或结束或返回或中断
- asp.net-web-api – 在WebAPI中的TaskScheduler.Unobserved
- ASP.NET Core 2.0仅在共享文件夹中查找视图
- asp.net – 在Visual Studio中编辑文件后,如何解决由于“ap
- 你能在每个动作上在ASP.NET-MVC中应用ActionFilter吗?
- asp.net-mvc – 部分视图继承自主布局
- iis – “立即启动应用程序池”和“启动模式AlwaysRunning”
推荐文章
站长推荐
- asp.net-mvc – 如何将KendoUI DropDownListFor绑
- asp.net-mvc – 堆栈跟踪错误
- Asp.net URL重写
- asp.net – 发布网站时,我的默认文档名称不断从I
- asp.net-mvc – 为什么验证请求取自ASP.net MVC?
- ASP.NET网站对SQL Server Express实例的连接产生
- 处理global.asax ASP.NET MVC中的异常
- asp.net – 如何在单击“提交”按钮后显示requir
- asp.net – .resx vs数据库vs用于提供本地化/全球
- asp.net-mvc-4 – ASP.Net Web Api在POST上不绑定
热点阅读