2

У меня есть ошибка после обновления Autofac.Mvc5 от 3.3.2 до 3.3.3 Я отправил свою проблему в github https://github.com/autofac/Autofac/issues/572#issuecomment-63236738 и получил ответ, который мне нужно задать здесь :)Ошибка после обновления Autofac.Mvc5 от 3.3.2 до 3.3.3

Ниже моей ситуации:

Что у меня есть:

// Setup DI as default MVC controller factory 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

мне это нужно использовать в закачиваемой собственности пользовательского поставщика членства

protected IMembershipService MembershipService 
{ 
    get 
    { 
     return DependencyResolver.Current.GetService(); 
    } 
} 

вопрос: Разрешитель зависимость не от типа «Autofac.Integration.Mvc.AutofacDependencyResolver»

Пожалуйста, помогите мне решить эту проблему.

UPDATE Так что теперь я такая ошибка после обновления с 3.3.2 до

Разрешитель зависимость не от типа «Autofac.Integration.Mvc.AutofacDependencyResolver» и не появляется, чтобы быть обернуты используя DynamicProxy из проекта Castle. Эта проблема может быть результатом изменения в реализации DynamicProxy или использования другой прокси-библиотеки для переноса преобразователя зависимостей.

Любые идеи о том, как их решить?

URL ошибки изображения http://i.stack.imgur.com/yJJXX.png

UPDATE Вот что я нашел github.com/autofac/Autofac/blob/82cc138596e74095f50720319feb2a2ce734310d/Core/Source/Autofac.Integration.Mvc/AutofacDependencyResolver.cs на этом файл у нас есть часть, где исключение выбрано для такого текста. Это только одна часть во всем исходном коде, поэтому я думаю, мне нужно двигаться вперед и выяснить, почему я получаю эту проблему. Также когда и почему мой код запрашивает этот метод AutofacDependencyResolver.Current. Поскольку я проверил, что у меня нет прямых вызовов AutofacDependencyResolver.Current. Мне нужно исследовать другие варианты (мест) вызовов.

+0

Но в чем вопрос? – Steven

+0

Какая ошибка? –

+0

моя проблема: преобразователь зависимости не относится к типу «Autofac.Integration.Mvc.AutofacDependencyResolver» –

ответ

0

Сейчас я вижу такое решение

 // Create DI container 
     var builder = new ContainerBuilder(); 

     // Register application modules 
     Autofac_RegisterApplicationModules(builder); 

     // Register filter provider 
     //builder.RegisterFilterProvider(); 

     // Register MVC specific abstractions (HttpRequestBase,HttpResponceBase etc) 
     builder.RegisterModule(new AutofacWebTypesModule()); 

     // container 
     var container = builder.Build(); 

Как вы можете видеть, что я прокомментировал эту строку

//builder.RegisterFilterProvider(); 

, но мне нужно подтверждение, если это нормально!

Пожалуйста, кто знает, если это правильно и/или как быть.

TRACE РЕЗУЛЬТАТ НИЖЕ - НУЖНА ПОМОЩЬ

[InvalidOperationException: The dependency resolver is not of type 'Autofac.Integration.Mvc.AutofacDependencyResolver' and does not appear to be wrapped using DynamicProxy from the Castle Project. This issue could be the result of a change in the DynamicProxy implementation or the use of a different proxy library to wrap the dependency resolver.] 
    Autofac.Integration.Mvc.AutofacDependencyResolver.get_Current() +367 
    Autofac.Integration.Mvc.AutofacFilterProvider.GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +196 
    System.Web.Mvc.FilterProviderCollection.GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +279 
    System.Web.Mvc.ControllerActionInvoker.GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +62 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +436 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1c(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState) +82 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +73 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +151 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +105 
    System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +588 
    System.Web.Mvc.Controller.<BeginExecute>b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) +47 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +65 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +151 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +139 
    System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +484 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +50 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) +98 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +73 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +151 
    System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +106 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +446 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +88 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +50 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

После моего нового расследования я узнал вопрос. Мой сайт использует MVCSiteMap

http://i.stack.imgur.com/7xnul.png

Я проверяю теперь, как настроить MvcSiteMapProvider не менять DI.

<add key="MvcSiteMapProvider_UseExternalDIContainer" value="false" /> 

Поэтому я считаю, что мне нужно изменить его на истинное, чтобы решить проблему. Я сейчас нахожусь на этом и дам вам знать.

Не стесняйтесь обновлять мой взгляд, если у вас есть решение!

+0

Я тоже занимаюсь этой проблемой, но я не понимаю исправления. Если мы перестанем регистрировать поставщиков фильтров, это не вызовет проблемы с моим кодом, который зависит от этих поставщиков? – ChaseMedallion

+0

Я добавляю новый ответ для этого ниже, пожалуйста, проверьте его. –

0

я не работал для меня эту линию:

Autofac_RegisterApplicationModules(builder); 

так я изменил его следующим образом:

RegisterAssemblyModules(builder); 

и он работает в настоящее время.

Спасибо за решение!

+0

Autofac_RegisterApplicationModules (построитель); был только моим методом, когда я зарегистрировал модули autofac и RegisterAssemblyModules (строитель); был здесь. Я думаю, что проблема была в том, что вы не запрашивали RegisterAssemblyModules (builder) ;. Так что это не связано с моей проблемой. –

0

У меня была та же проблема.

Это связано с MvcSiteMapProvider, используя собственный DI.

Вы можете решить эту проблему, используя пакет NuGet MvcSiteMapProvider MVC5 Autofac Dependency Injection Configuration и настроить Autofac, как описано в readme для этого проекта.

 Смежные вопросы

  • Нет связанных вопросов^_^