コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
ファイル: Utility.cs プロジェクト: jim0519/Dropship
        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());
            }
        }
コード例 #4
0
ファイル: AutoFacHandler.cs プロジェクト: zzb-private/WeiXin
        /// <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));
        }