Created
June 27, 2012 15:41
-
-
Save jeremiahredekop/3004915 to your computer and use it in GitHub Desktop.
Revisions
-
jeremiahredekop created this gist
Jun 27, 2012 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,87 @@ public class RelayAutofacInitializer : IAutofacInitializer { private readonly IAutofacInitializer _autofacInitializer; private readonly Action<ContainerBuilder> _init; public RelayAutofacInitializer(IAutofacInitializer autofacInitializer, Action<ContainerBuilder> init) { _autofacInitializer = autofacInitializer; _init = init; } public void RegisterDependenciesForContainer(ContainerBuilder containerBuilder) { if (_autofacInitializer != null) _autofacInitializer.RegisterDependenciesForContainer(containerBuilder); if (_init != null) _init(containerBuilder); } public void InitializeUsingContainer(ILifetimeScope container) { if (_autofacInitializer != null) _autofacInitializer.InitializeUsingContainer(container); } } public interface IAutofacInitializer { void RegisterDependenciesForContainer(ContainerBuilder containerBuilder); void InitializeUsingContainer(ILifetimeScope container); } public class CompositeRoot { private readonly ILifetimeScope _container; private CompositeRoot(ILifetimeScope container) { _container = container; } public static void Init(IAutofacInitializer initializer = null) { var builder = new ContainerBuilder(); if(initializer != null) initializer.RegisterDependenciesForContainer(builder); var container = builder.Build(); if(initializer != null) initializer.InitializeUsingContainer(container); var root = new CompositeRoot(container); Instance = root; } public static CompositeRoot Instance { get; private set; } public CompositeRoot CreateChild(string name, IAutofacInitializer initializer) { ILifetimeScope lifetimeScope = _container.BeginLifetimeScope(initializer.RegisterDependenciesForContainer); initializer.InitializeUsingContainer(lifetimeScope); var root = new CompositeRoot(lifetimeScope); return root; } public void PerformOnChildScopeUsingCustomInit(IAutofacInitializer initializer, Action<ILifetimeScope> @delegate) { using (var lifetimeScope = _container.BeginLifetimeScope(initializer.RegisterDependenciesForContainer)) { initializer.InitializeUsingContainer(lifetimeScope); @delegate(lifetimeScope); } } public T Resolve<T>() { return _container.Resolve<T>(); } }