Метод AutofacWebApiDependencyResolver не существует - PullRequest
0 голосов
/ 28 мая 2020

Я следую этому руководству Youtube DI для внедрения зависимостей. Это ясная вещь для меня, однако она не показывает, как реализовать в веб-API с использованием n-уровневой архитектуры. Я также добавил, следуя этому руководству: C -Sharp AutoFa c Учебник по веб-API .

Вот как выглядит мой код:

using Autofac;
using System.Linq;
using System.Reflection;
using System.Web.Http;

namespace WebAPI.App_Start
{
    public class AutofacWebapiConfig
    {

        public static IContainer Container;

        public static void Initialize(HttpConfiguration config)
        {
            Initialize(config, RegisterServices(new ContainerBuilder()));
        }

        public static void Initialize(HttpConfiguration config, IContainer container)
        {
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }

        private static IContainer RegisterServices(ContainerBuilder builder)
        {
            //Register your Web API controllers.  
            //builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

            builder.RegisterAssemblyTypes(Assembly.Load(nameof(Coordination)))
              .Where(t => t.Namespace.Contains("Services"))
              .As(t => t.GetInterfaces().FirstOrDefault(i => i.Name == "I" + t.Name));

            //Set the dependency resolver to be Autofac.  
            Container = builder.Build();

            return Container;
        }

    }
}

Проблемы, которые у меня возникают, заключаются в том, что AutofacWebApiDependencyResolver отсутствует.

И здесь я помещаю свой код для вызова класса AutofacWebapiConfig

namespace CB.WebAPI
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            //Dependency Injection
            //Configure AutoFac  
            AutofacWebapiConfig.Initialize(GlobalConfiguration.Configuration);

            // Web API routes
            ...
        }
    }
}

Это совершенно новый веб Ядро api с 3-х классной библиотекой, делающей многоуровневую архитектуру. Любая помощь будет оценена. Находится ли он в нужном месте для его вызова, мне нужно создать третий класс.

Я также добавил классифицированный Bootstrapper в свою папку app_start и изменил Global.asax, чтобы добавить строку Bootstrapper.Run ( );

1 Ответ

1 голос
/ 28 мая 2020

В комментариях вы сказали, что пространство имен AutofacWebApiDependencyResolver принадлежит (Autofa c .Integration.WebApi), когда вы пытаетесь добавить для него директиву using.

Похоже, что в вашем проекте не установлен пакет NuGet Autofa c .Webapi2.

Чтобы установить его с помощью Visual Studio:

  1. Выберите Инструменты | Диспетчер пакетов NuGet | Управление пакетами NuGet для решения ...
  2. Щелкните вкладку «Обзор»
  3. Введите Autofa c .Webapi2 и нажмите Enter / return
  4. Щелкните Autofa c .WebApi2 из список
  5. Выберите проект для его установки справа
  6. Нажмите «Установить»
  7. ОК, любые появившиеся лицензионные соглашения (при условии, что вы согласны).

В качестве альтернативы в Visual Studio 2019 вы устанавливаете его с помощью этой простой процедуры:

  1. Щелкните AutofacWebApiDependencyResolver
  2. Ctrl + .
  3. Выберите «Установить пакет 'Autofa c .WebApi2'»
  4. Нажмите «Найти и установить последнюю версию»

enter image description here

...