使用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 RadioButtonList ListItem上设置CSS类
- asp.net-mvc-3 – DropDownListFor Unobtrusive Validation
- 将搜索框添加到ASP.Net动态数据列表页面
- asp.net-mvc – ASP.NET MVC控制器的[Authorize]属性仅适用
- asp.net – FF和IE不从CSS加载img src
- 防止双击asp.net按钮
- ASP.NET Excel导出编码问题
- asp.net下文件上传和文件删除的代码
- 在asp.net c#应用程序中使用Graphviz Dll
- asp.net-mvc – SelectListItem中的Selected属性永远不会起
- SimpleMembership与ASP.NET MVC 4中的自定义数据
- asp.net-mvc – 在我的ASP.NET MVC网站中缓存不能
- asp.net – 如何序列化LINQ-to-SQL惰性列表
- asp.net-mvc-3 – 如何在Razor中为Nullable创建编
- asp.net-mvc-3 – 如何从ASP.NET MVC#输出中删除
- asp.net core webapi 服务端配置跨域的实例
- asp.net-mvc – 在MVC ActionLink中使用Knockout
- asp.net-mvc – 如何忽略ASP.NET MVC 4中特定Vie
- asp.net – 在我的网站中添加HttpModule时出现“
- asp.net – ASP.NET中的“关键字不支持:”错误
