private void ApplyLifeTime <T>(Autofac.Builder.IRegistrationBuilder <T, Autofac.Builder.IConcreteActivatorData, Autofac.Builder.SingleRegistrationStyle> x, LifeSpan lifeSpan) { switch (lifeSpan) { case LifeSpan.InstancePerLifetimeScope: x.InstancePerLifetimeScope(); break; case LifeSpan.NewInstancePerRequest: x.InstancePerRequest(); break; case LifeSpan.SingleInstance: x.SingleInstance(); break; } }
PerLifeStyle <TLimit, TActivatorData, TRegistrationStyle> (this Autofac.Builder.IRegistrationBuilder <TLimit, TActivatorData, TRegistrationStyle> builder, ComponentLifeStyle lifeStyle) { switch (lifeStyle) { case ComponentLifeStyle.LifetimeScope: return(HttpContext.Current != null?builder.InstancePerHttpRequest() : builder.InstancePerLifetimeScope()); case ComponentLifeStyle.Transient: return(builder.InstancePerDependency()); case ComponentLifeStyle.Singleton: return(builder.SingleInstance()); default: return(builder.SingleInstance()); } }
public static Autofac.Builder.IRegistrationBuilder <TLimit, TActivatorData, TRegistrationStyle> PerLifeStyle <TLimit, TActivatorData, TRegistrationStyle>(this Autofac.Builder.IRegistrationBuilder <TLimit, TActivatorData, TRegistrationStyle> builder, ComponentLifeStyle lifeStyle) { switch (lifeStyle) { case ComponentLifeStyle.LifetimeScope: return(builder.InstancePerLifetimeScope()); case ComponentLifeStyle.Transient: return(builder.InstancePerDependency()); case ComponentLifeStyle.Singleton: return(builder.SingleInstance()); default: return(builder.SingleInstance()); } }
/// <summary> /// AutoFac的容器 判断是否存在,存在就直接使用,不存在就创建 /// </summary> /// <param name="svrName">服务程序集名称</param> /// <returns></returns> public static IServiceProvider Register(IServiceCollection services, string[] svrNames) { if (_container == null) { lock (_lock) { if (_container == null) { // IOC容器注册 构造一个AutoFac的builder容器 ContainerBuilder builder = new ContainerBuilder(); builder.Populate(services); List <Type> types = new List <Type>(); foreach (string item in svrNames) { // 加载接口服务实现层。 Assembly SvrAss = Assembly.Load(item); // 反射扫描这个程序集中所有的类,得到这个程序集中所有类的集合。 types.AddRange(SvrAss.GetTypes()); } // 告诉AutoFac容器,创建stypes这个集合中所有类的对象实例 在一次Http请求上下文中,共享一个组件实例 Autofac.Builder.IRegistrationBuilder <object, Autofac.Features.Scanning.ScanningActivatorData, Autofac.Builder.DynamicRegistrationStyle> register = builder.RegisterTypes(types.ToArray()).AsImplementedInterfaces().InstancePerLifetimeScope().PropertiesAutowired();//指明创建的stypes这个集合中所有类的对象实例,以其接口的形式保存 //创建一个真正的AutoFac的工作容器 _container = builder.Build(); } } } return(new AutofacServiceProvider(_container)); }