asp.net-web-api – Web Api使用IDependencyResolver补充启动异
我正在开发一个Web Api,我决定使用自定义DependencyResolver.我参考
this [Dependency Injection for Web API Controllers]文章.到目前为止,一切都在依赖注入控制器方面运行良好.我的Owin启动类的配置代码片段
private void RegisterIoC(HttpConfiguration config) { _unityContainer = new UnityContainer(); _unityContainer.RegisterType<IAccountService,AccountService>(); ......... ......... config.DependencyResolver = new UnityResolver(_unityContainer); } 但是当Api首次在UnityResolver的GetService方法中抛出一些ResolutionFailedException(但捕获到)时.这是异常消息 "Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type,System.Web.Http.Hosting.IHostBufferPolicySelector,**is an interface and cannot be constructed. Are you missing a type mapping?**" 上述同样的异常抛出以下类型 System.Web.Http.Hosting.IHostBufferPolicySelector System.Web.Http.Tracing.ITraceWriter System.Web.Http.Metadata.ModelMetadataProvider System.Web.Http.Tracing.ITraceManager System.Web.Http.Dispatcher.IHttpControllerSelector System.Web.Http.Dispatcher.IAssembliesResolver System.Web.Http.Dispatcher.IHttpControllerTypeResolver System.Web.Http.Controllers.IHttpActionSelector System.Web.Http.Controllers.IActionValueBinder System.Web.Http.Validation.IBodyModelValidator System.Net.Http.Formatting.IContentNegotiator 我知道这些ResolutionFailedException是因为上述类型的unity配置没有提供映射. 现在这里是我的问题: – 如果我实现定制单位DependencyResolver,我需要定义上述类型的映射,如果需要定义什么将是他们相应的默认实现类型或有一些替代方法来实现DependencyResolver.我真的很关心即使应用程序运行正常,无法解决上述类型可能会导致严重的问题.请帮忙. 最后一个加法: System.Web.Http.Dispatcher.IHttpControllerActivator System.Web.Http.Validation.IModelValidatorCache System.Web.Http.Controllers.IHttpActionInvoker 解决方法
我正在使用Unity与WebApi和OWIN / Katana同样的问题.
我的解决方案是使用Unity.WebApi Nuget包中定义的UnityDependencyResolver,而不是我自己的自定义实现(像上面的@Omar Alani) Install-Package Unity.WebAPI 请注意,该软件包将尝试在App_Start中添加名为UnityConfig.cs的文件(我自己使用的文件名). 在UnityConfig.cs文件中,该软件包将添加代码,以便根据GlobalConfiguration.Configuration.DependencyResolver注册该容器,这不是我们想要的OWIN. 所以代替使用: GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); 更改使用: config.DependencyResolver = new UnityDependencyResolver(container); 为了完整性: 我的UnityConfig.cs public static class UnityConfig { public static void Register(HttpConfiguration config) { var container = new UnityContainer(); // Your mappings here config.DependencyResolver = new UnityDependencyResolver(container); } } 我的Startup.cs [assembly: OwinStartup(typeof(UnityTest.BusinessLayer.Api.ApiStartup))] namespace UnityTest.BusinessLayer.Api { public partial class ApiStartup { public void Configuration(IAppBuilder app) { app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); HttpConfiguration httpConfig = new HttpConfiguration(); UnityConfig.Register(httpConfig); ConfigureAuth(app); //In App_Start ->Startup.Auth WebApiConfig.Register(httpConfig); app.UseWebApi(httpConfig); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Web Api 2:带内容的NotFound()?
- asp.net 删除项目文件/文件夹IIS重启,Session丢失问题
- asp.net – 什么设置的User.Identity.Name和User.Identity.
- asp.net-core – 无法运行dnx控制台应用程序
- 使用AspNetPager与GridView完成分页
- asp.net-mvc – 如何通过保持’templateurl’原样来编译ang
- asp.net-mvc-3 – 我可以传递视图模型到动作链接来生成路由
- asp.net – 视图状态中存储的项目的生命周期是多少?
- 【Asp.Net MVC+EF+三层架构】详解(三)MVC VS 三层架构
- asp.net-mvc-3 – 是否可能显示从ASP.NET MVC 3中的数据库的