9

ビューを読み込もうとしているときに、上記の例外が発生します。

Unityを使用してコントローラーインスタンスを初期化します。それでも上記のエラーが発生します。

これが私のコントローラーです。

public class SiteController : Controller
{

    private ISiteRepository _repository;

    public SiteController(ISiteRepository repository)
    {
        _repository = repository;
    }

    //
    // GET: /Site/

    public ActionResult Index()
    {
        return View();
    }

    //
    // GET: /Site/Details/5

    public ActionResult Details(int id)
    {
        return View();
    }}

そして、これが私のGlobal.asax.csです

protected void Application_Start()
    {
        ConfigApi(GlobalConfiguration.Configuration);
        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

    static void ConfigApi(HttpConfiguration config)
    {
        var unity = new UnityContainer();
        unity.RegisterType<SiteController>();
        unity.RegisterType<ISiteRepository, SiteRepository>(new HierarchicalLifetimeManager());

        config.DependencyResolver = new IocContainer(unity);
    }

これが私のSiteRepositoryクラスです。

public class SiteRepository:ISiteRepository
{
    private readonly SampleMVCEntities _dbContext;

    public SiteRepository()
    {
        _dbContext = new SampleMVCEntities();
    }

    private IQueryable<SiteConfig> MapSiteConfig()
    {
        return _dbContext.SiteConfigs.Select(a => new SiteConfig
        {
            Name = a.Name,
            LinkColour = a.LinkColour,
            SiteLogo = a.SiteLogo,
            SiteBrands = a.SiteBrands.Select(b => new Models.SiteBrand { SiteId = b.SiteId, BrandId = b.BrandId })
        });
    }

    public IEnumerable<SiteConfig> GetAll()
    {
        return MapSiteConfig().AsEnumerable();
    }}

これは私のエラースタックです。

このオブジェクトにはパラメーターなしのコンストラクターは定義されていません。説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとそれがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。

例外の詳細:System.MissingMethodException:このオブジェクトにパラメーターなしのコンストラクターが定義されていません。

ソースエラー:

現在のWebリクエストの実行中に、未処理の例外が生成されました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して識別できます。

スタックトレース:

[MissingMethodException:このオブジェクトにパラメーターなしのコンストラクターが定義されていません。] System.RuntimeTypeHandle.CreateInstance(RuntimeType type、Boolean publicOnly、Boolean noCheck、Boolean&canBeCached、RuntimeMethodHandleInternal&ctor、Boolean&bNeedSecurityCheck)+0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly、Boolean skipCheckThis、ブールfillCache、StackCrawlMark&stackMark)+114
System.RuntimeType.CreateInstanceDefaultCtor(ブールpublicOnly、ブールskipCheckThis、ブールfillCache、StackCrawlMark&stackMark)+232 System.Activator.CreateInstance(タイプタイプ、ブール非パブリック)+83 System.Activator.CreateInstance(タイプタイプ)+6 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext、Type controllerType)+55

[InvalidOperationException:タイプ'Config.Controllers.SiteController'のコントローラーを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターのないパブリックコンストラクターがあることを確認してください。]
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext、Type controllerType)+179
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext、Type controllerType)+80
システム。 Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext、String controllerName)+74
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext、IController&controller、IControllerFactory&factory)+197System.Web.Mvc。<>c_ DisplayClass6.b_2()+49System.Web.Mvc。<>c__DisplayClassb 1 func)+88 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext、AsyncCallback callback、Object state)+98 System.Web.Mvc.MvcHandler.BeginProcessRequest( HttpContext httpContext、AsyncCallbackコールバック、オブジェクト状態)+50 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context、AsyncCallback cb、Object extraData)+16System.Web.CallHandlerExecutionStep.System.Web.HttpApplication 。 IExecutionStep.Execute()+268 System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+1551.<ProcessInApplicationTrust>b__a() +13 System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func




誰かが私を助けることができますか?

ありがとう。

4

1 に答える 1

15

ASP.NETMVCとASP.NETWebAPIは、2つの別個の依存関係リゾルバーを使用します

から派生した「通常の」MVCコントローラーの場合は、 :Controllerを使用する必要があります。DependencyResolver.SetResolver

DependencyResolver.SetResolver(new UnityDependencyResolver(container));

派生フォームであるWepAPIコントローラーの場合、コードでasApiControllerを使用する必要がありGlobalConfiguration.Configuration.DependencyResolverます。

したがって、両方のタイプのコントローラーを使用する場合は、コンテナーを2回登録する必要があります。

両方の依存関係リゾルバー用にUnityをセットアップする方法についての良い記事があります:

Unityを使用したASP.NETMVC4およびWebAPIでの依存性注入

于 2012-08-13T10:06:16.517 に答える