Example #1
0
        private static DatabaseOptions <TContext> DatabaseOptionsFactory <TContext>(
            IServiceProvider serviceProvider,
            Action <IServiceProvider, IDatabaseOptionsBuilder> optionsAction)
            where TContext : Database
        {
            var builder = DatabaseOptionsBuilder <TContext> .CreateInstance();

            optionsAction.Invoke(serviceProvider, builder);

            return(builder.Options);
        }
        /// <summary>
        /// Adds the cosmos database and all it's collections to the IoC
        /// </summary>
        /// <typeparam name="TDatabase"></typeparam>
        /// <param name="serviceCollection"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IServiceCollection AddCosmosDatabase <TDatabase>(this IServiceCollection serviceCollection, Action <DatabaseOptionsBuilder <TDatabase> > options)
            where TDatabase : CosmosDatabase
        {
            serviceCollection
            .AddSingleton(sp =>
            {
                var optionsBuilder = new DatabaseOptionsBuilder <TDatabase>();
                options(optionsBuilder);
                return(optionsBuilder.Options);
            })
            .AddSingleton <TDatabase>();

            foreach (var collectionProperty in typeof(TDatabase).GetProperties().Where(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericTypeDefinition() == typeof(ICosmosDbCollection <>)))
            {
                serviceCollection.AddSingleton(collectionProperty.PropertyType, sp =>
                {
                    var database = sp.GetRequiredService <TDatabase>();
                    return(collectionProperty.GetValue(database));
                });
            }
            return(serviceCollection);
        }