确保控制器有一个无参数的公共构造函数

本文关键字:构造函数 参数 控制器 有一个 确保 | 更新日期: 2023-09-27 18:06:18

我得到这个错误

尝试创建类型为"AnalyticController"的控制器时发生错误。确保控制器有一个无参数的公共构造函数。

代码可以在测试环境中工作,但不能在生产服务器上工作。

你知道是什么导致了这个问题吗?

这是我的控制器

public class AnalyticController : ApiController
{
    private AnalyticBLL analyticBLL = new AnalyticBLL();
    // POST api/status
    public void Post(AnalyticDTO analyticDTO)
    {
        if (!analyticBLL.Register(analyticDTO))
            helpers.BusinessLayer.CreateResponseException(analyticBLL.Errors);   
    }
}

确保控制器有一个无参数的公共构造函数

这取决于你如何处理DI(依赖注入)。默认情况下,控制器需要无参数构造函数,你必须使用Unity或Ninject之类的东西来处理DI。我看到你在继承ApiController,如果你在使用Ninject确保你下载了Ninject for Web API。如果你已经知道我刚才告诉你的一切,那么你需要提供更多的信息。你的计划是什么?你用什么来做DI?

我得到这个错误,因为我有一个异常发生在我的参数构造函数。尽管有错误消息,但它与要求无参数构造函数无关。

添加一个公共无参数构造函数,问题就解决了:

public class AnalyticController : ApiController
{
   public AnalyticController()
   {
   }
   // Variables and methods are the same as before
}

不知道这是否对其他人有帮助。我建造&然后在我的本地(开发)机器上对web服务运行我的应用程序。然后,在部署到生产环境之前,我运行我的应用程序,指向现有的生产web服务。这通常是有效的,但这次,它在"开发中"工作,但给了我这个"确保控制器有一个无参数的公共构造函数"错误信息"在生产中"(好吧,不是真正在生产中,而是针对生产web服务)。

这些解决方案似乎都不像是我的代码的问题,当我将代码部署到生产环境中时,当它全部在生产环境中时,我没有得到这个错误。我的猜测是,这可能与我的开发盒之间不同版本的NuGet包有关。生产。我将进行调查,我只是想提供这一点,以防其他人也有类似的"针对dev而不是prod"的情况。这可能是一个环境问题(取决于您所说的"在prod中不工作"是什么意思)。

对于我来说,我已经做了双重注册的依赖:

kernel.Bind<IMemoryCacheService>().To<MemoryCacheService>().InSingletonScope();
kernel.Bind<IMemoryCacheService>().To<MemoryCacheService>().InSingletonScope();