[英]Autofac with WebApi & Business Layer
我是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);
}
}
如果你使用构造函数注入(它真的是一个好主意)。 首先,您需要添加以通过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。 试试吧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.