ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AutoFac学习笔记

2021-09-11 17:00:07  阅读:180  来源: 互联网

标签:AutoFac Resolve RegisterType builder Register 笔记 学习 new AutoFacManager


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);

 

标签:AutoFac,Resolve,RegisterType,builder,Register,笔记,学习,new,AutoFacManager
来源: https://www.cnblogs.com/congqiandehoulai/p/15255667.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有