.net 确保控制器具有无参数公共构造函数

f1tvaqid  于 2023-05-19  发布在  .NET
关注(0)|答案(5)|浏览(257)

我得到这个错误
尝试创建“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);   
    }
}
efzxgjgh

efzxgjgh1#

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

cgyqldqp

cgyqldqp2#

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

xdyibdwo

xdyibdwo3#

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

public class AnalyticController : ApiController
{
   public AnalyticController()
   {
   }

   // Variables and methods are the same as before
}
waxmsbnn

waxmsbnn4#

我不知道这是否会帮助其他人。我构建并运行我的应用程序对Web服务都在我的本地(开发)框。然后,在部署到生产环境之前,我运行指向现有生产Web服务的应用程序。这通常是有效的,但这一次,它在“开发”中有效,但给了我这个“确保控制器在生产中有一个无参数的公共构造函数”错误消息(好吧,不是真的在生产中,而是针对生产Web服务)。
这些解决方案似乎都不是我的代码的问题,当我将代码部署到生产环境中时,我没有得到这个错误。我的猜测是,这可能与我的开发盒和生产之间的不同版本的NuGet包有关。我会调查,我只是想提供这一点,以防其他人有类似的“工程对开发,但不刺激”的情况。这可能是一个环境问题(取决于你所说的“在生产中”不工作是什么意思)。

vxqlmq5t

vxqlmq5t5#

对我来说,我已经完成了一个依赖项的双重注册,如下所示:

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

相关问题