【问题标题】:MVC:No parameterless constructor defined for this objectMVC:没有为此对象定义无参数构造函数
【发布时间】:2019-05-07 09:27:22
【问题描述】:

“/”应用程序中的服务器错误。 没有为此对象定义无参数构造函数。如何解决此问题。 我在创建的接口 ICompanyService 和类 CompanyService 中创建了一个文件夹。

控制器:

         public class HomeController : Controller
         {
               private ICompanyService icompanyService;
               public HomeController(ICompanyService icompanyService)
              {
                 this.icompanyService = icompanyService;
               }
                public ActionResult Index()
              {     
                 ViewBag.CompanyName = this.icompanyService.GetCompany();
                return View();
              }
         }

ICompanyService:

                 public interface ICompanyService
                {
                 string GetCompany();
                }

公司服务:

                   public class CompanyService
                   {
                      public string GetCompany()
                     {
                         return "Msc";
                     }
                 }

【问题讨论】:

  • 这个错误是在哪里抛出的?
  • 它抛出运行时异常没有为此对象定义无参数构造函数
  • 当然它会被扔在一条线上
  • 它没有显示错误行

标签: asp.net-mvc


【解决方案1】:

您需要在控制器中包含以下构造函数,

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

所以你的整个控制器代码如下所示,

    public class HomeController : Controller
{
    private ICompanyService icompanyService;

    public HomeController() : this(new CompanyService())
    {
    }
    public HomeController(ICompanyService icompanyService)
    {
        this.icompanyService = icompanyService;
    }
    public ActionResult Index()
    {
        ViewBag.CompanyName = this.icompanyService.GetCompany();

        return View();
    }
}

这将解决您的问题。

编码愉快!!!!

【讨论】:

    【解决方案2】:

    CompanyService 类应该继承自 ICompanyService 接口。 请研究.NET中的依赖注入。

     public class CompanyService : ICompanyService
                       {
                          public string GetCompany()
                         {
                             return "Msc";
                         }
                       }
    

    【讨论】:

    • 仍然抛出同样的问题
    • 因为你不在项目中使用依赖注入。像项目中的“Auto Fac”或“Ninject”或“Unity”一样配置。构造函数控制器默认没有参数。
    • 我希望这个链接会有所帮助:stackoverflow.com/questions/122273/…
    【解决方案3】:

    @ravi 请使用依赖注入,那么什么服务会在没有定义构造函数逻辑的情况下自动初始化你的服务构造函数,依赖注入句柄并初始化你的服务对象。不用担心初始化。

    下面我提到了 IoC 的链接,希望您的问题能尽快解决。 https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 2021-12-21
      • 2010-11-24
      • 2013-04-25
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多