C# MVC控制器需要空构造函数,但接口未使用并抛出错误

C# MVC控制器需要空构造函数,但接口未使用并抛出错误,c#,asp.net-mvc,interface,inversion-of-control,structuremap,C#,Asp.net Mvc,Interface,Inversion Of Control,Structuremap,我得到这个错误: 在PubStuff.Intern.Web.Internal.dll中发生“System.NullReferenceException”类型的异常,但未在用户代码中处理 附加信息:对象引用未设置为对象的实例 public class InternController : BaseController { IInternService _internService; public InternController() { } public Intern

我得到这个错误:

在PubStuff.Intern.Web.Internal.dll中发生“System.NullReferenceException”类型的异常,但未在用户代码中处理
附加信息:对象引用未设置为对象的实例

public class InternController : BaseController
{
    IInternService _internService;


    public InternController() { }

    public InternController(IInternService internService)
    {
        _internService = internService;
    }


    // GET: Intern
    public ActionResult Index()
    {
        object responseObject = null;


        responseObject = _internService.GetAllSkills();

        return View();
    }
}
  • 如果我没有空构造函数,它会抱怨
  • 一旦存在空构造函数,则此行
    responseObject=\u internetservice.GetAllSkills()抛出错误
  • _实习生服务为空

    如何解决此问题?有什么问题?

    更新 无论是否添加IInternUnitOfWork,我最终都会遇到StructureMap的问题

    我将
    IInternService
    添加到StructureMap,但没有任何帮助

    抛出错误

    protected override object DoGetInstance(Type serviceType, string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return serviceType.IsAbstract || serviceType.IsInterface
                           ? this.Container.TryGetInstance(serviceType)
                           : this.Container.GetInstance(serviceType);
            }
    
            return this.Container.GetInstance(serviceType, key);
        }
    

    “StructureMap异常代码:202\n没有为PluginFamily PublicHealth.Intern.DataAccess.Contracts.IIInternunitofWork、PublicHealth.Intern.DataAccess.Contracts定义默认实例,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”}

    您需要一个空构造函数,请尝试以下操作:

    public InternController():this(new  MyInternService())
    {
    }
    
    其中,
    myInternetService
    是默认的
    IInternService
    实现(即,您将在生产中使用的
    IInternService


    此模式最常用于向控制器提供“测试”数据,并能够在调用时更改某些定义,如使用测试框架。

    您需要一个空构造函数,请尝试以下操作:

    public InternController():this(new  MyInternService())
    {
    }
    
    其中,
    myInternetService
    是默认的
    IInternService
    实现(即,您将在生产中使用的
    IInternService


    此模式最常用于向控制器提供“测试”数据,并能够在调用时更改某些定义,如使用测试框架。

    看起来您被“无默认构造函数”错误消息烧坏了。使用DI时,这并不意味着您应该添加一个空构造函数

    public InternController() { }
    
    其实,

    此错误消息表示DI容器未插入MVC,因此MVC无法通过DI容器解析构造函数参数。您需要添加一行以将其插入,如下所示:

    ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory(container));
    


    在向StructureMap注册类型之后,这些行中的一行必须出现在应用程序的启动代码中。

    看起来您已经被“无默认构造函数”错误消息烧坏了。使用DI时,这并不意味着您应该添加一个空构造函数

    public InternController() { }
    
    其实,

    此错误消息表示DI容器未插入MVC,因此MVC无法通过DI容器解析构造函数参数。您需要添加一行以将其插入,如下所示:

    ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory(container));
    



    在向StructureMap注册类型之后,其中一行需要出现在您的应用程序启动代码中。

    您使用什么DI框架来注入服务?我假设它需要一个默认构造函数,这意味着您的代码(或自动生成/库代码)的某个地方引用默认构造函数。由于该构造函数不初始化_internetservice,因此尝试调用它会得到一个空引用是有意义的。@StephenMuecke-StructureMap-old version(2.6.1)我讨厌it@nhouser9如何跟踪类似的内容?看起来依赖项注入失败了,要么不发送任何内容,要么最终调用默认构造函数。在任何情况下,如果依赖项注入失败,应该在该点捕获它。。。否则,您必须在初始化该对象的默认构造函数中放入一些内容。您使用什么DI框架来注入服务?我假设它需要一个默认构造函数,这意味着您的代码(或自动生成/库代码)引用了默认构造函数。由于该构造函数不初始化_internetservice,因此尝试调用它会得到一个空引用是有意义的。@StephenMuecke-StructureMap-old version(2.6.1)我讨厌it@nhouser9如何跟踪类似的内容?看起来依赖项注入失败了,要么不发送任何内容,要么最终调用默认构造函数。在任何情况下,如果依赖项注入失败,应该在该点捕获它。。。否则,您必须在初始化该对象的默认构造函数中放入一些内容。只是忘记了:这将调用第二个构造函数,其中包含IInternService(MyInternService)的实现,我不确定是否遵循。InternetService确实实现了IIInterservice接口,但如果我这样做,则
    publicInternetController():这个(新的InternetService()){}
    不起作用everity代码描述项目文件行抑制状态错误CS7036给定的参数中没有与“InternetService.InternetService(IIInternunitoWork)”的必需形式参数“InternetUnitOfWork”对应的参数'PubStuff.Intern.Web.Internal C:\IPAA\Main\Src\PubStuffIntern\PubStuff.Intern.Web.Internal\Controllers\InternController.cs 19 active刚刚忘记:这将调用第二个构造函数,其中包含IIInternservice(MyInternService)的实现,我不确定是否遵循。InternetService确实实现了IIInterservice接口,但如果我这样做,则
    publicInternetController():这个(新的InternetService()){}
    不起作用everity代码描述项目文件行抑制状态错误CS7036给定的参数中没有与“InternetService.InternetService(IIInternunitoWork)”的必需形式参数“InternetUnitOfWork”对应的参数'PubStuff.Intern.Web.Internal C:\IPAA\Main\Src\PubStuffIntern\PubStuff.Intern.Web.Internal\Controllers\InternController.cs 19 active我知道StructureMap肯定会被调用,但不知怎么的