【问题标题】:mvc api controller dependency injection System.Web.Http and System.Web.Mvc reference errormvc api 控制器依赖注入 System.Web.Http 和 System.Web.Mvc 引用错误
【发布时间】:2017-08-04 14:19:43
【问题描述】:

我正在做一个带有 API2 控制器应用程序的 MVC 5。

我有一个在同一个项目中调用 ApiController 的控制器。 在我的 Api 控制器方法中,我想使用 DI。

看起来像这样。

        [ActionName("Method1")]
        [HttpPost]
        public int Method1(long User_id)
        {
            long user_id = Newtonsoft.Json.JsonConvert.DeserializeObject<long>(User_id.ToString());
            IContactRepository _contactRepository = DependencyResolver.Current.GetService<IContactRepository>();
            return _contactRepository.Get_CountMensajeByUser(user_id);
         
        }

为了使用

[ActionName("RetProduct")] 和 [HttpPost]

我必须包含using System.Web.Http; 参考

但是,另一方面,为了使用DependencyResolver,我必须包含

使用 System.Web.Mvc;

当我包含该引用时,System.Web.Http; 不起作用。

另一种选择是像这样在 API 控制器构造函数中设置 de DI

  private IContactRepository _sessionRepository;
        public ApiController(IContactRepository contactRepository)
        {
            _contactRepository = contactRepository;
           
        }

所以我避免使用DependencyResolver。但我必须在控制器构造函数中使用参数。 在我这样调用 Api 控制器的控制器上。

 var webApi = new APIController();
                model.CantMensajeByUser = webApi.CountMensajeByUser(10);

我不使用参数的地方。

正确的做法是什么?

【问题讨论】:

  • 您混淆了这个概念。您建议的第一个 sn-p 使用了 Service Locator 反模式。显式构造函数注入是可行的方法,但无需在 Controller 中创建 ApiController。只需在服务中具有功能并将服务注入控制器即可。如果 Web API 与 MVC 控制器共享同一个项目,则 DRY,重用服务。

标签: asp.net-mvc api dependency-injection http-post


【解决方案1】:

对于您要解决的问题,我认为更简单的解决方案是使用实际的 IoC 容器。特别是对于 C#.NET,Ninject 非常易于使用,最好的部分是您可以在一个文件中解决所有依赖项,而不是在业务逻辑中进行。

我鼓励您查看http://www.ninject.org/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    相关资源
    最近更新 更多