asp.net-web-api – Structure Map无参数构造函数错误
发布时间:2020-12-15 20:53:05 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用Web API 2设置结构图ver 3.0.5.0. 我已经遵循了这个实现:Configuring dependency injection with ASP.NET Web API 2.1 但是,在针对ComplexesController进行攻击时出现此错误: 尝试创建“ComplexesController”类型的控制器时发生错误.确保控
我正在尝试使用Web API 2设置结构图ver 3.0.5.0.
我已经遵循了这个实现:Configuring dependency injection with ASP.NET Web API 2.1 但是,在针对ComplexesController进行攻击时出现此错误: 尝试创建“ComplexesController”类型的控制器时发生错误.确保控制器具有无参数的公共构造函数. 谁能看到我的structuremap配置有什么问题?永远不会调用Create方法. 这是我的实施: public class StructureMapControllerActivator : IHttpControllerActivator { private readonly IContainer _container; public StructureMapControllerActivator(IContainer container) { if (container == null) throw new ArgumentNullException("container"); _container = container; } public IHttpController Create(HttpRequestMessage request,HttpControllerDescriptor controllerDescriptor,Type controllerType) { try { var scopedContainer = _container.GetNestedContainer(); scopedContainer.Inject(typeof(HttpRequestMessage),request); request.RegisterForDispose(scopedContainer); return (IHttpController)scopedContainer.GetInstance(controllerType); } catch (Exception e) { // TODO : Logging throw e; } } } 这个方法在我的创业公司…… public void InitializeContainer() { // STRUCTURE MAP Container container = new Container(); GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),new StructureMapControllerActivator(container)); container.Configure(x => x.For<IForumRepository>().Use<ForumRepository>()); container.Configure(x => x.For<IComplexRepository>().Use<ComplexRepository>()); } ..这是控制器: public class ComplexesController : ApiController { private IComplexRepository _repo; public ComplexesController(IComplexRepository repo) { _repo = repo; } // GET: api/Complexes public IList<Complex> GetComplexes() { var complexes = _repo.GetList(); return complexes; } ... 我的完整启动课程 [assembly: OwinStartup(typeof(AngularJSAuthentication.API.Startup))] namespace AngularJSAuthentication.API { public class Startup { public void Configuration(IAppBuilder app) { HttpConfiguration config = new HttpConfiguration(); WebApiConfig.Register(config); app.UseWebApi(config); } } } 解决方法
这里的问题是您使用GlobalConfiguration对象而不是HttpConfiguration对象注册服务激活器.在这种情况下,GlobalConfiguration对象永远不会被使用,因为它被HttpConfiguration对象替换.为了解决您的问题,您应该使用以下内容替换InitializeContainer()方法.
public void InitializeContainer(HttpConfiguration config) { // STRUCTURE MAP Container container = new Container(); config.Services.Replace(typeof(IHttpControllerActivator),new StructureMapControllerActivator(container)); container.Configure(x => x.For<IForumRepository>().Use<ForumRepository>()); container.Configure(x => x.For<IComplexRepository>().Use<ComplexRepository>()); } 然后,您应该将HttpConfiguration对象从Startup类传递给新的InitializeContainer()方法. 希望这可以帮助. -B (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 找不到ASP.NET MVC 3 HttpPost操作方法
- asp.net-mvc-2 – 如何在ASP.NET MVC2中为Html.LabelFor()添
- Ninject,ASP.NET和自定义控件
- asp.net – Response.IsClientConnected如何在幕后工作?
- asp.net-mvc – MVC,不再“假设”使用HttpContext.Current了
- C#--图片上传(PC端和APP)保存及 跨域上传说明
- 如何设置已禁用的ASP.NET按钮的样式
- 使用ASP.NET MVC和JQuery表单插件/文件上传检测IsAjaxReque
- asp.net-mvc – MongoDB,C#,QueryFailure标志不是master而s
- ASP.NET MVC 3布局所有子视图中的ViewBag数据
推荐文章
站长推荐
- asp.net-web-api2 – 如何在WebAPI中使用Swagger
- IdentityServer4 ASP.NET核心API Angular:登录/
- asp.net-mvc – ASP.net MVC – 视图如何访问模型
- .net – 一键更新所有WCF服务参考(两次点击也可以
- 在ASP.NET(C#)中实现安全,独特的“一次性”激活U
- 从ASP.NET Core连接到SQL Server的最佳实践?
- asp.net – 什么是连接池?
- 发布ASP.net无法看到程序集
- asp.net-mvc – 如何将相同URL的GET和DELETE请求
- asp.net-mvc-3 – 如何使用MVC中的存储库模式创建
热点阅读