autofac 注入代码示例

using System.Reflection;
using System.Web.Compilation;
using Autofac;
using Autofac.Integration.Mvc;
using Autofac.Configuration;
using ModelLibrary;

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;

private void Inject_Autofac()
        {
            //创建一个容器
            var builder = new ContainerBuilder();

            builder.RegisterAssemblyTypes();
            //注册所有的controller
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            //RegisterType方式:
            //builder.RegisterType<IService>().AsSelf().InstancePerDependency();
            //Register方式
            //builder.Register(c => new AService()).AsSelf().InstancePerDependency();


            // 自动注入的方式,不需要知道具体类的名称

            /* BuildManager.GetReferencedAssemblies()
             * 程序集的集合,包含 Web.config 文件的 assemblies 元素中指定的程序集、
             * 从 App_Code 目录中的自定义代码生成的程序集以及其他顶级文件夹中的程序集。
             */

            //获取包含继承了IService接口类的程序集
            var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(assembly => assembly.GetTypes().FirstOrDefault(type => type.GetInterfaces().Contains(typeof(IService))) != null);

            //注册程序集 registerAssemblyTypes
            var enumerable = assemblies as Assembly[] ?? assemblies.ToArray();
            if (enumerable.Any())
            {
                builder.RegisterAssemblyTypes(enumerable).Where(type => type.GetInterfaces().Contains(typeof(IService))).AsImplementedInterfaces().InstancePerDependency();
            }

            //把容器装入到微软默认的依赖注入容器中
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

        }


        private void _autoFac()
        {
            var builder = new ContainerBuilder();
            SetupResolveRules(builder);
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            //把容器装入到微软默认的依赖注入容器中
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }

        private void SetupResolveRules(ContainerBuilder builder)
        {
            //UI项目只用引用service和repository的接口,不用引用实现的dll。  
            //如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll  
            var IServices = Assembly.Load("ModelLibrary");


            //根据名称约定(服务层的接口和实现均以Service结尾),实现服务接口和服务实现的依赖  
            builder.RegisterAssemblyTypes(IServices)
              .Where(t => t.Name.EndsWith("Service"))
              .AsImplementedInterfaces();

        }

        private void conf_atuoFac()
        {
            string path = System.AppDomain.CurrentDomain.BaseDirectory + "config/config.json";

            var config = new ConfigurationBuilder();
            config.AddJsonFile(path);

            var module = new ConfigurationModule(config.Build());

            var builder = new ContainerBuilder();
            builder.RegisterModule(module);

            builder.RegisterControllers(Assembly.GetExecutingAssembly());

            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值