使用ASP.NET Web API 2.1配置依赖注入
我创建一个ASP.NET Web API 2.1网站,因为我想注入依赖项直接到控制器,我创建了我自己的IDependencyResolver的实现,以便StructureMap将为我处理。 public class StructureMapDependencyResolver : IDependencyResolver { public IDependencyScope BeginScope() { return this; } public object GetService(Type serviceType) { return ObjectFactory.GetInstance(serviceType); } public IEnumerable<object> GetServices(Type serviceType) { return ObjectFactory.GetAllInstances(serviceType).Cast<object>(); } public void Dispose() { } } 然后我告诉Web API通过将此行添加到Global.asax中的Application_Start方法来使用此类 GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(); 那个编译,但是当我试图访问任何API方法在浏览器中,我得到一个这样的错误 No Default Instance defined for PluginFamily System.Web.Http.Hosting.IHostBufferPolicySelector,System.Web.Http 这是一个相对容易解决,因为我添加一行到我的StructureMap配置 this.For<IHostBufferPolicySelector>().Use<WebHostBufferPolicySelector>(); 然而,我得到其他类似的错误为其他System.Web.Http类,虽然我可以解决其中一些我困在如何处理其中3,即ITraceManager,IExceptionHandler和IContentNegotiator。 问题是,TraceManager似乎是ITraceManager的默认实现是一个内部类,所以我不能在我的StructureMap配置中引用它。 所以我是完全错误的方式,还是有其他方式来注入这些内部类? 解决方法我想给你一个建议和解释,为什么不这样做,以及如何做不同的(我甚至会说得更好和正确)。对不适当的IDependencyResolver设计的完整和完整的解释可以在这里找到:Dependency Injection and Lifetime Management with ASP.NET Web API通过Mark Seemann 让我引述这些重要部分:
并且:
ServiceActivator 因此,在这种情况下的答案将是ServiceActivator。请看看这个答案: > WebAPI + APIController with structureMap ServiceActivator的一个示例: public class ServiceActivator : IHttpControllerActivator { public ServiceActivator(HttpConfiguration configuration) {} public IHttpController Create(HttpRequestMessage request,HttpControllerDescriptor controllerDescriptor,Type controllerType) { var controller = ObjectFactory.GetInstance(controllerType) as IHttpController; return controller; } } 我们可以用StructureMap做的,就是到位。 Web API框架的关键特性仍然存在…我们不必黑客攻击它们。我们也使用DI / IoC然后Service定位器 (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – .net 4.5 ASP.Net web API JSONP支持
- ASP.NET两个截取字符串的方法分享
- 什么是使用aspnet_compiler.exe预编译ASP.NET项目的优势?
- Asp.NEt邮箱验证修改密码通过邮箱找回密码功能
- asp.net-mvc – 在MVC4中绑定的正确方法
- asp.net – VB.NET – 如何使用Active Directory将SID转换为
- asp.net-mvc – 使用AD的ASP.NET MVC表单Auth在本地工作但在
- 如何以编程方式将ListItems添加到ASP.NET中的DropDownList?
- asp.net – 脚本标签和链接标签进入asp:内容或外部
- asp.net-mvc – 将viewdata传递给asp.net mvc masterpages
- ASP.Net Forms身份验证在10分钟后注销用户
- ASP.NET JSON字符串与实体类的互转换示例代码
- 模型绑定 – WebApi2:自定义参数绑定以绑定部分
- asp.net – UserControl Viewstate在回发后丢失所
- asp.net-ajax – Ajax脚本管理器和母版页
- ASP.NET 2.0和4.0似乎在Forms身份验证中以不同方
- asp.net – 我的HTML5的doctype是否必须在第一行
- asp.net-mvc-3 – 具有最佳实践的示例N层ASP.NET
- asp.net-web-api – 在ASP.NET Web API控制器的n
- 谈基于.net平台开发中的模式窗体