-
Notifications
You must be signed in to change notification settings - Fork 6
ASP.NET Core
Martin Havlišta edited this page Sep 6, 2018
·
33 revisions
WORK IN PROGRESS
Follow these steps to use CoreDdd in ASP.NET Core MVC application (tested with Visual Studio 2017 and .NET Core 2.1):
- Create a new ASP.NET Core MVC project.
- Install following nuget packages into the project:
- CoreDdd
- CoreDdd.Nhibernate
- CoreDdd.AspNetCore
- CoreDdd.Register.DependencyInjection
- CoreDdd.Nhibernate.Register.DependencyInjection
- Add a new empty NHibernate configurator class, example:
using System.Reflection;
using CoreDdd.Nhibernate.Configurations;
namespace CoreDddSampleAspNetCoreWebApp
{
public class CoreDddSampleNhibernateConfigurator : NhibernateConfigurator
{
protected override Assembly[] GetAssembliesToMap()
{
return new Assembly[0];
}
}
}- Add a new NHibernate config file hibernate.cfg.xml . Here is SQLite example:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.connection_string">Data Source=CoreDddSampleAspNetCoreWebApp.db</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
<property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
<property name="connection.release_mode">on_close</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="show_sql">false</property>
<property name="proxyfactory.factory_class">NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property>
<property name="transaction.use_connection_on_system_prepare">false</property>
</session-factory>
</hibernate-configuration>Set hibernate.cfg.xml Build Action to Content, and Copy to Output Directory to Copy if newer.
- Install System.Data.SQLite.Core nuget package. Version 1.0.108 needs to be manually installed via command
Install-Package System.Data.SQLite.Core -Version 1.0.108from Package Manager Console (Tools -> Nuget Package Manager -> Package Manager Console; current latest version 1.0.109.1 is broken). For different databases, please look at Entity database persistence. - Add the following code into
Startup.ConfigureServices()to register CoreDdd services into Dependency Injection:
services.AddCoreDdd();
services.AddCoreDddNhibernate<CoreDddSampleNhibernateConfigurator>();- Add
app.UseMiddleware<UnitOfWorkDependencyInjectionMiddleware>(IsolationLevel.ReadCommitted);intoStartup.Configure()to handle each request in the ADO.NET transaction.
The code above is available as a sample ASP.NET Core MVC application here. The sample application also contains ShipController with methods to create a new Ship aggregate root domain entity, query ships by name and update ship data.
You can check out other wiki pages how to persist an entity, query data, modify an application state or create more complex DDD implementation.