Skip to content
This repository has been archived by the owner on May 7, 2020. It is now read-only.
/ Stove Public archive

Domain Driven Design oriented application framework, meets CRUD needs

License

Notifications You must be signed in to change notification settings

stoveproject/Stove

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stove Build status alt text

Package Status
Stove NuGet version
Stove.Entityframework NuGet version
Stove.Hangfire NuGet version
Stove.NLog NuGet version
Stove.Mapster NuGet version
Stove.Redis NuGet version
Stove.Dapper NuGet version
Stove.RabbitMQ NuGet version
Stove.NHibernate NuGet version
Stove.RavenDB NuGet version
  • Autofac for Ioc
  • AmbientContext Unit Of Work pattern
  • Conventional Registration Mechanism with Autofac.Extras.IocManager
  • EventBus for DDD use cases
  • EntityFramework
  • NHibernate
  • Generic Repository Pattern, DbContext, Multiple DbContext control in one unit of work, TransactionScope support
  • Dapper and EF both can use in one application.
  • Dapper and EF have their own repositories. IDapperRepository<Product>, IRepository<Product>
  • Dapper-EntityFramework works under same transaction and unit of work scope, if any exception appears in domain whole transaction will be rollback, including Dapper's insert/deletes and EF's.
  • Stove.Dapper supports Dynamic Filters to filter automatically and default ISoftDelete or other user defined filters.
  • Stove.Dapper also works with NHibernate under same transaction. Like EF transaction sharing.
  • RabbitMQ support
  • HangFire support
  • Redis support
  • A lot of extensions
  • Strictly SOLID

Composition Root

IRootResolver resolver = IocBuilder.New
                                   .UseAutofacContainerBuilder()
                                   .UseStove<StoveDemoBootstrapper>(autoUnitOfWorkInterceptionEnabled: true)
                                   .UseStoveEntityFramework()
                                   .UseStoveDapper()
                                   .UseStoveMapster()
                                   .UseStoveDefaultEventBus()
                                   .UseStoveDbContextEfTransactionStrategy()
                                   .UseStoveTypedConnectionStringResolver()
                                   .UseStoveNLog()
                                   .UseStoveBackgroundJobs()
                                   .UseStoveRedisCaching()
                                   .UseStoveRabbitMQ(configuration =>
                                   {
                                       configuration.HostAddress = "rabbitmq://localhost/";
                                       configuration.Username = "admin";
                                       configuration.Password = "admin";
                                       configuration.QueueName = "Default";
                                       return configuration;
                                   })
                                   .UseStoveHangfire(configuration =>
                                   {
                                       configuration.GlobalConfiguration
                                                    .UseSqlServerStorage("Default")
                                                    .UseNLogLogProvider();
                                       return configuration;
                                   })
                                   .RegisterServices(r => r.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()))
                                   .CreateResolver();

var someDomainService = resolver.Resolve<SomeDomainService>();
someDomainService.DoSomeStuff();
 

It will be documented in detail!