【问题标题】:No parameterless constructor defined when accessing web service访问 Web 服务时未定义无参数构造函数
【发布时间】:2013-03-20 18:04:26
【问题描述】:

无法弄清楚我做错了什么。

控制器代码。

public class HomeController : Controller
{
    private readonly SoapWebService _db;

    public HomeController(SoapWebService db)
    {
        _db = db;
    }

    public ActionResult Index()
    {
        return View(_db.GetAllItems("APIKey").ToList());
    }
 }

查看代码

@model IEnumerable<ProjectName.ServiceName.ItemName>

@foreach (var item in Model) {
     @Html.DisplayFor(item => item.Title)
}

错误

没有为此对象定义无参数构造函数。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

【问题讨论】:

  • 您使用的是什么 DI 工具?结构图?你甚至没有提到这一点。
  • 这是一个错字:@Html.DisplayFor(modelItem => item.Title)?应该是@Html.DisplayFor(item => item.Title)?
  • 这是一个错字,我没有使用依赖注入器,也许这就是我在这里出错的地方。
  • 应该还不需要 IoC。我认为@Oliver 解决了您的第一个问题。那么你可能有另一个。

标签: c# asp.net asp.net-mvc


【解决方案1】:

如果不使用依赖注入功能(框架或手动),您的控制器将无法实例化,因为没有无参数的构造函数。

在您的情况下,依赖注入器将创建 SoapWebService 的实例以传递给仅控制器的构造函数。

如果不使用 DI,您将需要一个无参数构造函数来实例化任何依赖项本身:

public class HomeController : Controller
{
    private readonly SoapWebService _db;

    public HomeController()
        : this(new SoapWebService()) { }

    public HomeController(SoapWebService db)
    {
        _db = db;
    }

    public ActionResult Index()
    {
        return View(_db.GetAllItems("APIKey").ToList());
    }
 }

【讨论】:

  • 谢谢你,这让我走上了正轨。虽然添加无参数构造函数会增加错误。错误 6 无法创建抽象类或接口“SoapService”的实例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
相关资源
最近更新 更多