Пример #1
0
        public virtual IDependencyResolver CreateChildDependencyResolver(Action <IDependencyManager> childDependencyManagerCustomizer = null)
        {
            IAutofacDependencyManager childDependencyManager = new AutofacDependencyManager();

            ILifetimeScope container = GetContainer().BeginLifetimeScope(containerBuilder =>
            {
                if (childDependencyManagerCustomizer != null)
                {
                    childDependencyManager.UseContainerBuilder(containerBuilder);
                    childDependencyManagerCustomizer((IDependencyManager)childDependencyManager);
                }
            });

            childDependencyManager.UseContainer(container);

            return((IDependencyResolver)childDependencyManager);
        }
        public virtual IDependencyManager RegisterUsing(Func <IDependencyResolver, object> factory, TypeInfo[] servicesType, string name = null, DependencyLifeCycle lifeCycle = DependencyLifeCycle.PerScopeInstance, bool overwriteExciting = true)
        {
            IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> registration = GetContainerBuidler().Register((context, parameter) =>
            {
                AutofacDependencyManager currentAutofacDepdencyManager = new AutofacDependencyManager();
                currentAutofacDepdencyManager.UseContainer(context.Resolve <ILifetimeScope>());
                return(factory.DynamicInvoke(currentAutofacDepdencyManager));
            }).As(servicesType);

            if (overwriteExciting == false)
            {
                registration = registration.PreserveExistingDefaults();
            }

            if (name != null)
            {
                foreach (TypeInfo serviceType in servicesType)
                {
                    registration = registration.Named(name, serviceType);
                }
            }

            if (lifeCycle == DependencyLifeCycle.Transient)
            {
                registration = registration.InstancePerDependency();
            }
            else if (lifeCycle == DependencyLifeCycle.SingleInstance)
            {
                registration = registration.SingleInstance();
            }
            else
            {
                registration = registration.InstancePerLifetimeScope();
            }

            return(this);
        }