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