zoukankan      html  css  js  c++  java
  • Autofac 使用经验

    慢慢总结

    基础使用样例,在 Application_Start 中直接使用

                //autofac注册
                var builder = new ContainerBuilder();
                //注册Controller方式一  自己指定程序集
                //var assemblies = new List<Assembly> { Assembly.Load("TestEf.Web") };
                //builder.RegisterControllers(assemblies.ToArray());
                //注册Controller方式二  当前执行项目的程序集
                builder.RegisterControllers(Assembly.GetExecutingAssembly());
                //注册泛型类使用 RegisterGeneric
                builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
                builder.Register<IDbContext>(c => new TestEfContext()).InstancePerLifetimeScope();
                //注册普通类使用 RegisterType
                builder.RegisterType<ArticleService>().As<IArticleService>().InstancePerLifetimeScope();
                var container = builder.Build();
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

    ① 注册 Controller

    方式一:

    //注册Controller方式一  自己指定程序集
    var assemblies = new List<Assembly> { Assembly.Load("TestEf.Web") };
    builder.RegisterControllers(assemblies.ToArray());

    方式二:

    //注册Controller方式二  当前执行项目的程序集
    builder.RegisterControllers(Assembly.GetExecutingAssembly());

    ② 常用接口注册方式

    方式一:泛型注册使用  RegisterGeneric

    builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();

    方式二:普通类型使用 RegisterType

    builder.RegisterType<ArticleService>().As<IArticleService>().InstancePerLifetimeScope();

    ③生命周期

     InstancePerDependency  默认值,每次解析时都会得到一个新的实例

    SingleInstance 单例 每次解析都会得到同一个实例

    InstancePerLifetimeScope 同一生命周期内得到相同的实例

    InstancePerMatchingLifetimeScope  同一生命周期升级版,可以指定与某个生命周期获取获取相同的实例

    InstancePerRequest  根据Request请求来确定,在一个web/http/api的上下文中共享一个组件实例

    Thread Scope 线程内共享,没有特定的方法,可以根据 InstancePerMatchingLifetimeScope 来实现

    ④使用

    方式一:在静态方法中,没有构造函数来进行注册

    var _articleService = DependencyResolver.Current.GetService<IArticleService>();
  • 相关阅读:
    电脑使用优化工具方法
    算法练习的网站
    golang 实现链表反转打印
    刷过的算法题
    Symfony2框架实战教程——第六天#Alt:验证码
    Symfony2框架实战教程——第六天:模板重载与翻译
    [Symfony2] 在命令或控制器里跑另一个命令的N种方法
    Symfony2框架实战教程——第五天:KnpMenuBundle创建菜单项+结合Twitter Boostrap3
    Symfony2框架实战教程——第四天#Alt:用FOSUserBundle实现用户注册和登录
    Symfony2框架实战教程——第四天:用HWIOAuthBundle实现第三方登录
  • 原文地址:https://www.cnblogs.com/ideacore/p/7532041.html
Copyright © 2011-2022 走看看