【问题标题】:No parameterless constructor, structuremap, new area无参数构造函数、结构图、新区域
【发布时间】:2012-07-25 17:15:34
【问题描述】:

我知道错误“没有为此对象定义无参数构造函数”已被询问大约一百万次。我的情况不一样

我有一个工作应用程序。许多许多控制器和一个有许多控制器的区域。我刚刚添加了一个新区域。我添加了一个控制器,然后添加了一个指向该控制器的链接。现在我得到了 “没有为此对象定义无参数构造函数”错误

我之前已经看到并克服了这个问题,但它实际上每 5 个月才会发生一次。每次我完全忘记(压抑)答案。

请帮忙

雷夫

【问题讨论】:

  • 听起来控制器不是由结构映射创建的?
  • 您能否粘贴您的代码示例,说明您在哪里拥有构造函数以及在哪里使用对象?错误听起来像是您创建了一些方法重载并调用了不正确的构造函数
  • 此控制器几乎与此应用程序中的所有其他控制器完全相同。只有一个构造函数。它有几个服务被注入其中,调试器永远不会启动

标签: asp.net-mvc compiler-errors structuremap asp.net-mvc-areas


【解决方案1】:

好的,看来有几个原因可能会导致此错误。毫不奇怪,它们都没有 @#$% 与没有无参数构造函数有关。我知道的两个是

1) 如果您正在使用一个区域,并且您将控制器从一个命名空间移动到新的命名空间并且不更新命名空间以反映该区域,您将收到此错误。

2) 这就是我现在的情况,如果你正在向控制器的构造函数中注入一些东西并且你正在注入的项目有问题(没有实例化,或者它没有在你的 IOC 注册中注册或一些其他运行时错误)你会得到这个错误。

如果人们能想到其他人,他们应该在此处列出,因为我认为还有几个导致错误的原因。 回复

【讨论】:

  • 如果您在 Visual Studio 中调试项目并检查“输出”面板,您将看到一条更详细的消息,该消息准确地告诉您哪个对象 StructureMap 无法构造。我已经看到由于不正确的访问修饰符而发生错误 - 例如如果您的接口是公共的,但具体类不是,则 StructureMap 可能无法构造具体类的实例。
  • 还需要确保具体类继承自接口。
  • 谢谢。我只是在学习 SM,我无法克服这个错误。感谢您的提示,我意识到我的示例类没有“公共”访问器。我犯了一个愚蠢的错误,但错误消息根本没有帮助。
  • 我遇到了同样的问题,原因是“如果您将某些东西注入控制器的构造函数并且您注入的项目有问题”。实际上,我在DAL类名+(控制器注入Iservice,服务注入IDal)中打错了,所以SM无法扫描并获取正确的实例。而且我只有在vs2015中调试时才能找出根本原因。在vs2010 sp1中,错误信息很常见“没有为此对象定义无参数构造函数。”
【解决方案2】:

虽然我意识到这并不能真正回答您的问题,但您的回答在我的故障排除工作中帮助了我。

我最近在使用 MVC Contrib 项目中的 MVC Portable Areas 时遇到了同样的问题。我发现在 IOC 注册期间扫描程序集时,还必须包括可移植区域所具有的任何 dll 依赖项,类似于以下内容:

ObjectFactory.Initialize(x => x.Scan(y =>
    {
        y.Assembly("PortableAreaAssemblyName");
    }));
ObjectFactory.Configure(x =>
    {
        x.For<IClassInterfaceUsedByControllerConstructor>().Use<IntendedClassInstance>();
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-12
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2017-10-02
    • 2015-02-23
    相关资源
    最近更新 更多