从数据库更新实体后出错:没有为此对象定义无参数构造函数

本文关键字:对象 定义 构造函数 参数 更新 数据库 实体 出错 | 更新日期: 2023-09-27 18:26:42

有人见过这样的东西吗:

我已经接管了对现有解决方案的编码,该解决方案一直运行得很好,直到我向数据库中添加了一个新表,然后从数据库中更新了实体。一切似乎都很好,直到运行时,我突然在家庭控制器上出现了这个错误:

No parameterless constructor defined for this object.

从堆栈跟踪。。。

[InvalidOperationException: An error occurred when trying to create a controller of type 'Response.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.]

问题是,家庭控制器没有改变。它从来没有一个无参数的构造函数。此外,所有对它的引用都带有参数,所以我甚至不确定它在哪里/为什么认为它需要一个无参数的构造函数。

真的很困惑。

如果我需要添加更多内容来帮助解决此问题,请告诉我。我有点在黑暗中拍摄,因为我以前从未见过这样的东西。

编辑:

这是构造函数:

        public HomeController([Dependency("ImageUploadPath")] string imageUploadPath, 
            IPermissions permissions, 
            IResponseEntitiesFactory responseEntities, 
            IResponseWebConfiguration responseWebConfiguration,
            ILog log)
            : base(imageUploadPath, permissions, responseWebConfiguration)
        {
            _responseEntitiesFactory = responseEntities;
            _responseWebConfiguration = responseWebConfiguration;
            _log = log;
        }

编辑#2:

该解决方案使用Unity DI框架。这是IUnityContainer。。。

public class Bootstrapper
{
public static IUnityContainer BootstrapUnity()
    {
        IUnityContainer container = new UnityContainer();
        container.RegisterInstance(LogManager.GetLogger(typeof(Bootstrapper)));
        var log = container.Resolve<ILog>();
        container.RegisterType<IResponseQueueConfiguration, ResponseQueueConfiguration>();
        var configuration = container.Resolve<IResponseQueueConfiguration>();
        container.RegisterType<IMessageDispatcherManager, MessageDispatcherManager>();
        container.RegisterType<ResponseTimeHelper, ResponseTimeHelper>(new InjectionConstructor(log)); // hint for unity to default to the parameter less constructor (it tries to default to the IResonseEntities version!)
        container.RegisterType<IActivityQueue, MSMQActivityQueue>(new InjectionConstructor(configuration.QueueName));
        container.RegisterType<IActivityService, LeadActivityService>();
        container.RegisterType<IDispositionDiagnosticService, DispositionDiagnosticService>();
        container.RegisterType<IHttpPoxService, HttpPoxService>(new InjectionConstructor(configuration.UrbanScienceDispositionService, log));
        container.RegisterType<ICreateWorkflowTasksService, CreateWorkflowTasksService>();
        container.RegisterType<INewLeadNotifications, NewLeadNotifications>();

        container.RegisterType<IResponseEntities, ResponseEntities>(new PerThreadLifetimeManager());
        container.RegisterInstance<IResponseEntitiesFactory>(new SimpleResponseEntitiesFactory(() => new ResponseEntities()));
        container.RegisterInstance(container.Resolve<IResponseEntitiesFactory>().Create());
        container.RegisterType<ITokenReplacementService, TokenReplacementService>();
        container.RegisterType<IMessageProcessor, SendEmailMessageProcessor>("sendemail");
        container.RegisterType<IMessageProcessor, SendNewLeadNotificationsMessageProcessor>("sendnewleads");
        container.RegisterType<ITokenReplacementService, TokenReplacementService>();
        container.RegisterType<ISmtpConfiguration, SmtpConfiguration>();
        return container;
    }
}

从数据库更新实体后出错:没有为此对象定义无参数构造函数

现在我没有看到IPermissionsIResponseWebConfigurationimageUploadPath的注册。要么使用了另一个注册文件,要么它们没有注册。

您可以在上次注册后注册的位置为我提到的每种类型添加container.ResolveType<T>,并检查是否引发任何异常。您还可以在调试中手动检查容器,查看项目的所有注册,并确定缺少什么。