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 を使用する場合は、次の 2 つのオプションがあります。

  1. IControllerFactoryコントローラーのインスタンス化に DI コンテナーを使用する独自の実装を記述します。次の方法で登録できます。

    var factory = new CustomControllerFactory(コンテナ); ControllerBuilder.Current.SetControllerFactory(factory);

  2. IDependencyResolverコントローラーを含む MVC インフラストラクチャのあらゆる部分を解決できる実装。

2番目のオプションが望ましいです。

詳細については、こちらを参照してください(Unity コンテナーに関するものですが、Autofac でこれを行うのに十分な知識が得られるはずです。

于 2013-07-23T12:57:48.420 に答える