使用WebApi& amp;业务层

时间:2016-04-08 12:49:45

标签: c# .net asp.net-web-api autofac

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

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

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

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

编辑:

AutoMapper个人资料。

public class CustomProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<MyViewModel, MyModel>()
            .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<MyProfile1>();
            cfg.AddProfile<MyProfile2>();
        });

        base.Load(builder);
    }
}

1 个答案:

答案 0 :(得分:4)

如果你使用构造函数注入(它确实是一个好主意)。 首先,您需要添加以通过Nuget添加对Autofac.WebApi2程序集的引用。让我们认为你的控制器在主机(Service.dll或像这样的一些想法)的不同组件中然后你

<强>服务   我们所有控制器的项目:

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; }

}

商务层

你必须创建一个模块

  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和它的RegisterApiControllers。试试吧。