zoukankan      html  css  js  c++  java
  • AutoFac学习笔记

    AutoFac
    属性注册:
    反射:builder.RegisterType<AutoFacManager>().PropertiesAutowired();
    预先定义:builder.RegisterType<AutoFacManager>().WithProperty("person", new Worker());
    构造时候:builder.Register(c => new AutoFacManager { person = c.Resolve<IPerson>() });
    循环依赖,创建后:builder.Register(c => new AutoFacManager()).OnActivated(e => e.Instance.person = e.Context.Resolve<IPerson>());


    生命周期:
    默认生命周期,每次请求创建新对象:  
    builder.RegisterType<Worker>().InstancePerDependency();
    单例,每次使用同一对象:builder.RegisterType<Worker>().SingleInstance();
    同一个生命周期使用同一对象: builder.RegisterType<Worker>().InstancePerLifetimeScope();
    上下文:  builder.RegisterType<XWorker>().InstancePerMatchingLifetimeScope(MyContextHierarchy.UserSession);
    var userSessionLifetime = container.BeginLifetimeScope();
      userSessionLifetime.Tag = MyContextHierarchy.UserSession;

    自己管理生命周期:
    private Owned<IOutput> _output;

    别名区分:
      builder.RegisterType<Worker>().Named<IPerson>("worker");
      IPerson p = container.ResolveNamed<IPerson>("worker");

    枚举区分:
    builder.RegisterType<Student>().Keyed<IPerson>(DeviceState.Student);
    IPerson p = container.ResolveKeyed<IPerson>(DeviceState.Student);
    枚举,索引获取:
    IIndex<DeviceState, IPerson> IIndex = container.Resolve<IIndex<DeviceState, IPerson>>();
    IPerson p = IIndex[DeviceState.Student];


    构造函数选择:
     参数类型: builder.RegisterType(typeof(Worker)).UsingConstructor(typeof(int));
    参数: List<NamedParameter> ListNamedParameter = new List<NamedParameter>() { new NamedParameter("Id", 1), new NamedParameter("Name", "张三") };
    builder.RegisterType<Worker>().WithParameters(ListNamedParameter).As<IPerson>();
    自动: builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).As<IPerson>();


    程序集扫描:
    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t => t.Name.EndsWith("Manager"));
    排除:Except<AutoFacManager)>(),Except<Worker>(ct =>ct.As<IPerson>().SingleInstance())


    方法注入:
    构造函数: builder.Register(c =>
    {
    var result = new AutoFacManager();
    result.SetDependency(c.Resolve<IPerson>());
    return result;
    });

     Activing: builder.Register<AutoFacManager>(c => new AutoFacManager()).OnActivating(e => e.Instance.SetDependency(new Worker()));


    Resolve:
    传递参数: AutoFacManager manager = container.Resolve<AutoFacManager>(new NamedParameter("name", "刘备"));
    TypedParameter/ResolvedParameter/NamedParameter /NamedParameter 和TypedParameter
    builder.Register((c, p) => new AutoFacManager(p.Named<string>("name"), c.Resolve<IPerson>()));
    AutoFacManager manager = container.Resolve<AutoFacManager>(new NamedParameter("name", "刘备"));


    循环依赖:
    cb.Register<Worker>().OnActivated(ActivatedHandler.InjectUnsetProperties);

  • 相关阅读:
    去掉DevExpress gridControl控件表头上的的默认英文字母
    【555】folium 更换底图
    github图片不显示问题解决
    厉害了,自己动手实现 LRU 缓存机制!
    一文搞懂 Netty 的整体流程,还有谁不会?
    PageHelper 分页一直有性能问题?
    left join 后用 on 还是 where,区别大了!
    不推荐别的了,IDEA 自带的数据库工具就很牛逼!
    王炸!!IDEA 2021.1 推出语音、视频功能,边写代码边聊天,我真的服了…
    别再面向 for 循环编程了,Spring 自带的观察者模式就很香!
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/15255667.html
Copyright © 2011-2022 走看看