使用WebApi和业务层进行Autofac

我是AutoFac的新手,我正在尝试将它用于我的新项目,包括WebApi和Business Layer以及合同及其各自的实现。

我已经编写了webapi的IocConfiguration并从global.asax调用。

但是,对于我的Business Logic,如何使用autofac设置所有合同和实现?

我确实在线阅读了一些教程但是我找不到任何有用的东西,如果有人有一个示例应用程序,链接真的有帮助。

编辑:

AutoMapper个人资料。

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

编辑:

经过几个小时的花费,我想出了如何使用AutoFac设置AutoMapper 4.2.1。 显然我在AutoMapper 3.3.0中使用了ConfigurationStore,但是我升级到了4.2.1,配置文件注册发生了一些变化。 以下是对我有用的。

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

如果你使用构造函数注入(它真的是一个好主意)。 首先,您需要添加以通过Nuget添加对Autofac.WebApi2程序集的引用。 让我们认为您的控制器在主机(Service.dll或类似的东西)的不同程序集中

与我们所有控制器的服务项目:

 public class DependenyInitializer { public static readonly DependenyInitializer Instance = new DependenyInitializer(); private DependenyInitializer() { var builder = new ContainerBuilder(); builder.RegisterModule(); // register all dependencies that has been set up in that module builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); this.Container = builder.Build(); } public IContainer Container { get; } } 

商务层

你必须创建一个模块

  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 config))

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

这里的主要内容是知道你需要Autofac.WebApi2和它的RegisterApiControllers。 试试吧。