public static void TryAddSingleton <TService>(this ICoconaLiteServiceCollection services, Func <IServiceProvider, TService> factory)
 {
     if (services.All(x => x.ServiceType != typeof(TService)))
     {
         services.AddSingleton <TService>(factory);
     }
 }
 public static void TryAddSingleton <TService>(this ICoconaLiteServiceCollection services, TService instance)
 {
     if (services.All(x => x.ServiceType != typeof(TService)))
     {
         services.AddSingleton <TService>(instance);
     }
 }
 public static void TryAddSingleton <TService, TImplementation>(this ICoconaLiteServiceCollection services)
     where TImplementation : TService
 {
     if (services.All(x => x.ServiceType != typeof(TService)))
     {
         services.AddSingleton <TService, TImplementation>();
     }
 }
 public static void TryAddTransient <TService, TImplementation>(this ICoconaLiteServiceCollection services, Func <IServiceProvider, TService> factory)
     where TImplementation : TService
 {
     if (services.All(x => x.ServiceType != typeof(TService)))
     {
         services.AddTransient <TService>(factory);
     }
 }
 public static void AddSingleton <TService>(this ICoconaLiteServiceCollection services, Func <IServiceProvider, TService> factory)
 {
     services.AddDescriptor <TService>((provider, disposables) =>
     {
         var instance = factory(provider) ?? throw new InvalidOperationException($"The service factory of '{typeof(TService)}' must be non-null value.");
         if (instance is IDisposable disposable)
         {
             disposables.Add(disposable);
         }
         return(instance);
     }, singleton: true);
 }
 public static void AddSingleton <TService, TImplementation>(this ICoconaLiteServiceCollection services)
     where TImplementation : TService
 {
     services.AddDescriptor <TService>((provider, disposables) =>
     {
         var instance = (TService)SimpleActivator.CreateInstance(provider, typeof(TImplementation))
                        ?? throw new InvalidOperationException($"The service factory of '{typeof(TService)}' must be non-null value.");
         if (instance is IDisposable disposable)
         {
             disposables.Add(disposable);
         }
         return(instance);
     }, singleton: true);
 }
        public static void AddTransient <TService, TImplementation>(this ICoconaLiteServiceCollection services)
            where TImplementation : TService
        {
            services.AddDescriptor <TService>((provider, disposables) =>
            {
                var instance = SimpleActivator.CreateInstance(provider, typeof(TImplementation));
                if (instance is IDisposable disposable)
                {
                    disposables.Add(disposable);
                }

                return(instance);
            }, singleton: false);
        }
        public static void AddJsonConfigurationService(
            this ICoconaLiteServiceCollection services,
            string jsonConfigurationPath)
        {
            string jsonConfigurationDirectory = Directory.GetParent(jsonConfigurationPath).FullName;

            if (!Directory.Exists(jsonConfigurationDirectory))
            {
                Directory.CreateDirectory(jsonConfigurationDirectory);
            }

            var pfs        = new PhysicalFileSystem();
            var fileSystem = new SubFileSystem(
                pfs,
                pfs.ConvertPathFromInternal(jsonConfigurationDirectory),
                owned: true);

            services.AddTransient <IConfigurationService <ToolConfiguration> >(
                _ => new JsonConfigurationService(
                    fileSystem,
                    Path.GetFileName(jsonConfigurationPath)));
        }
 public static void AddDescriptor(this ICoconaLiteServiceCollection services, ServiceDescriptor serviceDescriptor)
 {
     services.Add(serviceDescriptor);
 }
 public static void AddSingleton <TService>(this ICoconaLiteServiceCollection services, TService instance)
 {
     services.AddSingleton <TService>(_ => instance);
 }
 public static void AddDescriptor <TService>(this ICoconaLiteServiceCollection services, Func <IServiceProvider, List <IDisposable>, object> factory, bool singleton)
 {
     services.AddDescriptor(new ServiceDescriptor(typeof(TService), factory, singleton));
 }
 public CoconaLiteServiceProvider(ICoconaLiteServiceCollection services)
 {
     _descriptorsByService = services.GroupBy(k => k.ServiceType).ToDictionary(k => k.Key, v => v.ToArray());
     _disposables          = new List <IDisposable>(10);
 }