1
 public partial class RegistrationController : Controller
{

    private readonly IPartnerRepository _partnerRepository;

    public RegistrationController(IPartnerRepository partnerRepository)
    {

        _partnerRepository =partnerRepository;

    }}

我使用 autoface 进行依赖注入,但出现此错误:

` No parameterless constructor defined for this object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[MissingMethodException: No parameterless constructor defined for this object.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +113
   System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +83
   System.Activator.CreateInstance(Type type) +6
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +55

[InvalidOperationException: Une erreur s'est produite lors de la tentative de création d'un contrôleur de type « Registration.Front.Web.Controllers.RegistrationController ». Assurez-vous que le contrôleur a un constructeur public sans paramètre.]
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +179
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +197
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +49
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
`

当我从构造函数中删除时,我没有这个错误:

  public partial class RegistrationController : Controller
{

    private readonly IPartnerRepository _partnerRepository;

    public RegistrationController()
    {



    }}

我该如何解决这个问题?

4

2 回答 2

2

ASP.NET MVC 有专门的服务,负责创建控制器的实例——这个服务应该实现IControllerFactory接口。的默认实现IControllerFactory期望您的控制器具有无参数构造函数并调用它。如果您想将 DI 与控制器一起使用,您有两种可能的选择:

  1. 编写您自己的实现IControllerFactory,使用您的 DI 容器来实例化控制器。您可以通过以下方式注册它:

    var factory = new CustomControllerFactory(container); ControllerBuilder.Current.SetControllerFactory(factory);

  2. 实现IDependencyResolver可以解析任何 MVC 基础设施,包括控制器。

第二种选择更可取。

您可以在此处阅读有关此内容的更多详细信息(它是关于 Unity 容器的,但我认为它应该为您提供足够的知识来使用 Autofac 执行此操作。

于 2013-07-23T12:57:48.420 回答
0

发生这种情况的原因有很多,其中之一是依赖注入未配置为注入 IPartnerRepository 的具体类。

第二个是,如果具体类本身有一个构造函数,该构造函数依赖于另一个被注入的依赖项,则第二个构造函数没有配置为依赖注入。

最后,如果找不到包含要注入的类的 DLL,也会发生这种情况,但通常注入框架会告诉您它找不到 DLL。

于 2013-07-23T12:00:53.013 回答