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