Autofac-ASP.NET MVC、WebApi 使用

1.安装Autofac包和Autofac.Integration.Mvc包,在global中进行注入:

            var builder = new ContainerBuilder();
            //注册所有Controller
            builder.RegisterControllers(Assembly.GetExecutingAssembly());

            //所有引用的程序集
            var referencesAseemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();

            builder.RegisterAssemblyTypes(referencesAseemblies.ToArray())
                .Where(t => t.Name.EndsWith("AppService") && !t.IsAbstract )
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();

            builder.RegisterGeneric(typeof(ServiceBase<>))
                .As(typeof(IServiceBase<>))
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();    //保证对象声明周期基于请求

            var container = builder.Build();    //Build方法创建一个容器
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));       //注册MVC容器

2.在Controller构造函数进行注入测试:

   

    public class HomeController : Controller
    {
        private readonly IServiceBase<Role> _roleService;
        private readonly IProductAppService _productService;
        public HomeController(IServiceBase<Role> roleService, IProductAppService productService)
        {
            _roleService = roleService;
            _productService = productService;
        }
        public ActionResult Index()
        {
            string str = _productService.Show();
            var list = _roleService.Query(new PagingParam()).ToList();
            return View();
        }

3.WebApi注入,和Controller不太一样,需要引用Autofac、Autofac ASP.NET WebApi2、Asp.Net WebApi.WebHost

            IocBuilder.RegisterApiControllers(startupModule.ControllerAseembly);
            IocBuilder.RegisterAssemblyTypes(startupModule._StartupAssemblies.ToArray())
                .Where(t => t.Name.EndsWith("AppService") && !t.IsAbstract)
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();

            IocBuilder.RegisterGeneric(typeof(BaseAppService<>))
                .As(typeof(IBaseAppService<>))
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();
  var container = IocBuilder.Build();
  var resolver = new AutofacWebApiDependencyResolver(container);
  GlobalConfiguration.Configuration.DependencyResolver = resolver;
然后就可以再apiController进行构造函数注入了,用法和MVC一样。

Autofac注入,实现类注入到接口,使用的时候,接口的实例就是注入的类型,

如Log4注入:

bootStrapper.IocBuilder.Register(t => log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType))
               .As<ILog>().AsImplementedInterfaces().InstancePerLifetimeScope();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值