添加AutoFac引用
- Autofac
- Autofac.Integration.Mvc (如果是Mvc项目)
- Autofac.Integration.WebApi (如果是Api项目)
新建AufoFacConfig.cs类
namespace EVMTest
{
public class AutoFacConfig
{
public static void Register()
{
var builder = new ContainerBuilder();
//注册MVC控制器
builder.RegisterControllers(Assembly.GetExecutingAssembly());
//注册Api控制器
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
SetupResolveRules(builder);
//SetupResolveRulesOneByOne(builder);
var container = builder.Build();
//
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
//
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
/// <summary>
/// 程序集注入
/// </summary>
/// <param name="builder"></param>
public static void SetupResolveRules(ContainerBuilder builder)
{
//WebAPI只用引用services和repository的接口,不用引用实现的dll。
//如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll
var iservices = Assembly.Load("IService");
var services = Assembly.Load("Service");
//var iRepository = Assembly.Load("WebAPI.IRepository");
//var repository = Assembly.Load("WebAPI.Repository");
builder.RegisterAssemblyTypes(iservices, services)
.Where(_ => _.Name.EndsWith("Service"))
.AsImplementedInterfaces();
////根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖
//builder.RegisterAssemblyTypes(iRepository, repository)
// .Where(t => t.Name.EndsWith("Repository"))
// .AsImplementedInterfaces();
}
/// <summary>
/// 单个接口依赖注入
/// </summary>
/// <param name="builder"></param>
public static void SetupResolveRulesOneByOne(ContainerBuilder builder)
{
builder.RegisterType<UserService>().As<IUserService>();
}
}
}
其中Assembly.Load("IService"),Assembly.Load("Service")中的参数是我定义的两个类库项目,分别写接口类与实现类.
.Where(_ => _.Name.EndsWith("Service"))意思是接口和实现类,需要以Service结尾。
程序启动注册
在Gloal.asax.cs的Application_strat方法中添加 AutoFacConfig.Register();
初始化依赖注入
控制器直接初始化依赖注入Service
namespace EVMTest.Controllers.tests
{
public class DMSUserController : ApiController
{
public IUserService _userservice;
/// <summary>
/// 构造方法依赖注入
/// </summary>
/// <param name="userservice"></param>
public DMSUserController(IUserService userservice)
{
_userservice = userservice;
}
// GET: DMSUser
/// <summary>
/// 获取所有用户
/// </summary>
/// <returns></returns>
[HttpGet]
public IHttpActionResult AllUser()
{
var data = _userservice.GetAllUser();
return Json(data);
}
}