我是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);
}
}
答案 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。试试吧。