Добавлен фреймворк Unity DI, и теперь появляется ошибка «Тип UmbracoAuthorizeAttribute имеет несколько конструкторов длины 1. Невозможно устранить неоднозначность». - PullRequest
0 голосов
/ 29 мая 2018

Я добавил инфраструктуру Unity DI в качестве пакета nuget для своего решения Umbraco.Мой файл конфигурации Unity выглядит следующим образом:

public static class UnityConfig
{
    #region Unity Container
    private static Lazy<IUnityContainer> container =
      new Lazy<IUnityContainer>(() =>
      {
          var container = new UnityContainer();
          RegisterTypes(container);
          return container;
      });

    public static IUnityContainer Container => container.Value;
    #endregion

    public static void RegisterTypes(IUnityContainer container)
    {
        container.RegisterType<IHomeViewModelFactory, HomeViewModelFactory>(new PerResolveLifetimeManager());
    }
}

Я могу запустить веб-сайт, но как только я пытаюсь получить доступ к бэк-офису Umbraco, я получаю:

Тип UmbracoAuthorizeAttribute имеет несколько конструкторовдлины 1. Невозможно устранить неоднозначность.

В частности, в файле журнала написано:

ERROR Umbraco.Core.UmbracoApplicationBase - An unhandled exception occurred
Unity.Exceptions.ResolutionFailedException: Resolution of the dependency failed, type = 'Umbraco.Web.Mvc.UmbracoAuthorizeAttribute', name = '(none)'.
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The type UmbracoAuthorizeAttribute has multiple constructors of length 1. Unable to disambiguate.
-----------------------------------------------
At the time of the exception, the container was: 
  Resolving Umbraco.Web.Mvc.UmbracoAuthorizeAttribute,(none)
 ---> System.InvalidOperationException: The type UmbracoAuthorizeAttribute has multiple constructors of length 1. Unable to disambiguate.
   at Unity.ObjectBuilder.BuildPlan.Selection.ConstructorSelectorPolicyBase`1.FindLongestConstructor(Type typeToConstruct)
   at Unity.ObjectBuilder.BuildPlan.Selection.ConstructorSelectorPolicyBase`1.SelectConstructor(IBuilderContext context, IPolicyList resolverPolicyDestination)
   at Unity.ObjectBuilder.BuildPlan.DynamicMethod.Creation.DynamicMethodConstructorStrategy.CreateInstanceBuildupExpression(DynamicBuildPlanGenerationContext buildContext, IBuilderContext context)

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Попробуйте добавить это в конфигурацию Unity

container.RegisterType<Name of Controller>(new InjectionConstructor());
0 голосов
/ 15 июня 2018

В UnityConfig.cs, addind следующее решение решит проблему:

container.RegisterType<UmbracoAuthorizeAttribute>(new InjectionConstructor());
...