使用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定位器 (编辑:鲜蔬坊站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 可以为空的枚举类型的奇怪行为
- ASP.NET通过分布式Session提升性能
- asp.net代码中修改web.config节点的具体方法
- 部署 – kestrel-hellomvc.service:步骤USER产生失败/usr/
- asp.net-mvc-3 – 在MVC Razor View中使用If语句
- asp.net-mvc-3 – 应该使用HTTP引用来验证还是令牌验证来防
- asp.net-web-api – 从ASP.NET Web API ASP.NET Core 2返回
- asp.net-mvc – 用于选择的KendoUI网格Ajax绑定参数
- 从ASP.NET C#启动一个程序
- asp.net – __doPostBack在DotNetNuke网站上未定义为IE 10
- ASP.NET 2.0或3.5?
- asp.net-mvc – 什么时候使用ViewData而不是View
- asp.net – 我想列出我的下拉列表中的所有国家/地
- asp.net-mvc – MVC3验证与实体框架模型/数据库首
- asp.net-mvc – KendoUI网格显示总记录数
- asp.net – Html.Partial()跳过控制器动作
- 使用System.Net.Mail中的SMTP发送邮件(带附件)
- asp.net – IIS Web Garden中的Singleton对象
- asp.net – 查询字符串参数使我的应用程序面临风
- asp.net-mvc – MVC项目中的System.Globalizatio