[Practice Note] AutoFac依赖注入

本文介绍了如何在项目中引入并配置AutoFac进行依赖注入。首先添加Autofac及其相关适配器的引用,接着创建AutoFacConfig.cs配置类,然后在程序启动时注册组件,最后展示了在控制器中如何通过依赖注入获取Service。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加AutoFac引用

  1. Autofac
  2. Autofac.Integration.Mvc (如果是Mvc项目)
  3. 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);
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值