private IIocContainer InitializeInternal(IIocKernelBuilder container, Action <IDependencyBuilder> buildDependencies, Action afterBuild) { lock (this) { if (_kernel != null) { return(_kernel); } var builder = container.CreateDependencyBuilder(); builder.BindFunction(ctx => Container).Resolve <IIocContainer>().InSingletonScope(); buildDependencies?.Invoke(builder); builder.Build(); afterBuild?.Invoke(); _kernel = container.CreateIocContainer(); return(_kernel); } }
/// <summary> /// Initialize the IOC solution. This must be called for the IOC to work. /// </summary> /// <param name="container"> /// Specifiy the kernel container that housed the underlying IOC methodology. /// </param> /// <param name="buildDependencies"> /// Specify the build dependency action to invoke, this is where you can add additional /// dependencies to the builder. /// </param> /// <param name="afterBuild">Specify an after build action.</param> /// <returns></returns> public static IIocContainer Initialize(IIocKernelBuilder container, Action <IDependencyBuilder> buildDependencies, Action afterBuild = null) => Instance.InitializeInternal(container, buildDependencies, afterBuild);