使用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-web-api – Web API和.NET 4.5:声明和权利
- asp.net – 如何在网格中按日期升序?
- asp.net-mvc – 为什么Razor会添加另一个值属性以及如何删除
- 体系结构设计良好的ASP.NET WebForms站点示例
- asp.net-core – 具有不同root的ASP.Net核心反向代理
- asp.net – 使用Google货币转换API时,输入字符串不是正确的
- asp.net-mvc – 从asp.net mvc控制器返回一个js文件
- asp.net-mvc-3 – 基于字符串创建ViewBag属性
- 在ASP.NET MVC 2中集成CKEditor?
- asp.net – 如何在Identity 3.0中获取当前的UserId? User.
- asp.net – 如何拒绝用户访问子文件夹和文件?
- 动手造轮子:写一个日志框架
- asp.net-mvc – Mocking HttpPostedFileBase和In
- asp.net-mvc – User.Identity.IsAuthenticated在
- 通过经典ASP调试activeX dll
- asp.net – SOAP 1.2在SOAP 1.1工作时产生错误请
- asp.net-mvc – MVC OAUTH VS2012模板,在哪里输入
- 让OData和NHibernate结合进行动态查询
- 如何重定向到ASP.NET MVC中的调用页面?
- asp.net-mvc – IoC Castle Windsor – 没有为此