2016-04-08 3 views
2

Я очень новичок в AutoFac и стараюсь использовать его для моего нового проекта с WebApi и Business Layer с контрактами и их соответствующими реализациями.Autofac с WebApi & Business Layer

Я написал IocConfiguration для webapi и вызывается из global.asax.

Однако, для моей бизнес-логики, как мне настроить все мои контракты и реализации с помощью autofac?

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

Edit:

AutoMapper профиль.

public class CustomProfile : Profile 
{ 
    protected override void Configure() 
    { 
     CreateMap<MyViewModel, MyModel>() 
      .ForMember(d => d.Id, s => s.MapFrom(src => src.Id)); 
    } 
} 

Edit:

После нескольких долгих часов, проведенных на этом я понял, как настройки AutoMapper 4.2.1 с AutoFac. По-видимому, я использовал ConfigurationStore в AutoMapper 3.3.0, но я обновился до 4.2.1. Регистрация профиля немного изменилась. Ниже я работал для меня.

public class AutoMapperModule : Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     Mapper.Initialize(cfg => 
     { 
      cfg.AddProfile<MyProfile1>(); 
      cfg.AddProfile<MyProfile2>(); 
     }); 

     base.Load(builder); 
    } 
} 

ответ

2

Если вы используете инъекцию конструктора (и это действительно хорошая идея). Сначала вам нужно добавить, чтобы добавить ссылку на сборку Autofac.WebApi2 через Nuget. Давайте думать, что ваши контроллеры находятся в другой сборке, что хозяин (Service.dll или somethink, как это), то вы

Услуга Проекта со всеми нашими контроллерами:

public class DependenyInitializer 
{ 

    public static readonly DependenyInitializer Instance = new DependenyInitializer(); 

     private DependenyInitializer() 
     { 
      var builder = new ContainerBuilder(); 
      builder.RegisterModule<BusinessLayerModule>(); // register all dependencies that has been set up in that module 
      builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
      this.Container = builder.Build(); 
     } 

public IContainer Container { get; } 

} 

Промишленого Layer

ll `должны создать модуль

using System.Reflection; 
    using Autofac; 
    using DataAccessLayer; 
    using Module = Autofac.Module; 

public class BusinessLayerModule : Module 
    { 
    protected override void Load(ContainerBuilder builder) 
     { 
     builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces(); // that links all clases with the implemented interfaces (it they mapped 1:1 to each other) 
     } 

Хостинг (WebApiConfig.cs в Реестре (HttpConfiguration конфигурации))

var container = DependenyInitializer.Instance.Container; 
    config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

Главное здесь макетов зная, что вам нужно Autofac.WebApi2 и `s RegisterApiControllers. Попробуй это.

+0

Большое спасибо за ответ. У меня есть мой webapi и бизнес в разных проектах, у меня есть контракты с бизнес-менеджерами в другом проекте. поэтому я вставляю интерфейс бизнес-менеджера в конструктор контроллера web-api. Как я уже сказал, я написал BusinessLayerModule, однако они не вызываются при загрузке. Однако businesslayermodule не загружается. Очевидно, что я не зарегистрировал модуль, builder.RegisterModule () Является ли мой подход правильным? – Immortal

+0

Ваш подход выглядит правильно. Вы используете DependencyInitializer в своем проекте? Все зависимости, фактически зарегистрированные там в построителе.Build() только после этого вы можете использовать их – Vladimir

+0

Написать комментарий, если у вас все еще есть проблемы, я попробую помочь – Vladimir

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