Service registration¶
This library exposes one modern registration surface, AddNhibernateServices/AddNhibernateServices<T>, which registers a singleton IUnitOfWorkFactory and a scoped UnitOfWorkAccessor for any ASP.NET Core or generic-host application. It also retains 13 legacy registration methods on IServicesNhibernateExtensions as [Obsolete("Due to functional changes between .net core 2.2 and .net core 3.1, this method is obsolete to avoid startup errors.", true)] compile-time errors, kept only to force migration off the pre-.NET Core 3.1 API; none of the 13 registers any service at runtime, although their body mechanics differ (see the catalog below).
Registration extension catalog¶
| Extension method | Hosting context | Parameters | Source |
|---|---|---|---|
AddNhibernateServices(this IServiceCollection services, IEnumerable<Assembly> assemblyMappings, bool debugOutputSql) |
web | API | worker | console | assemblyMappings: assemblies scanned for Fluent ClassMap<T> and HBM mappings, fixed for the factory's lifetime. debugOutputSql: when true, attaches SqlDebugOutputInterceptor to stateful sessions (active only while a debugger is attached). |
src/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Extensions/IServicesCollectionExtensions.cs |
AddNhibernateServices<T>(this IServiceCollection services, bool debugOutputSql = false) |
web | API | worker | console | T: any type in the single mapping assembly to scan (Assembly.GetAssembly(typeof(T))). debugOutputSql defaults to false. |
Same file |
AddUnitOfWorkAccessor(this IServiceCollection services) [Obsolete, compile-error] |
N/A | None (no parameters beyond the this IServiceCollection services extension receiver) |
Extensions/IServicesNhibernateExtensions.cs — no registration side effect; return services; only |
UseOracleSession(this IServiceCollection services, IEnumerable<Assembly> mappings, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | mappings, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
UseOracleSession(this IServiceCollection services, Assembly mappings, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | mappings, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
UseOracleSession<T>(this IServiceCollection services, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | T, statelessSession, formatSql, batchSize, showSql — T is actually used to resolve a mapping assembly before delegating to the IEnumerable<Assembly> overload above, which then discards it; still no registration side effect |
Same file — no registration side effect |
UsePostGreSqlSession(this IServiceCollection services, IEnumerable<Assembly> mappings, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | mappings, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
UsePostGreSqlSession(this IServiceCollection services, Assembly mappings, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | mappings, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
UsePostGreSqlSession<T>(this IServiceCollection services, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | T, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; unlike the Oracle generic overload, T is never actually inspected (literal return services; body) |
Same file — no registration side effect |
UseSqlSession(this IServiceCollection services, IEnumerable<Assembly> mappings, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | mappings, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
UseSqlSession(this IServiceCollection services, Assembly mappings, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | mappings, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
UseSqlSession<T>(this IServiceCollection services, bool statelessSession = false, bool formatSql = false, int batchSize = 20, bool showSql = false) [Obsolete, compile-error] |
N/A | T, statelessSession, formatSql, batchSize, showSql — all accepted but ignored; unlike the Oracle generic overload, T is never actually inspected (literal return services; body) |
Same file — no registration side effect |
AddOracleUnitOfWork(this IServiceCollection services, string unitOfWorkInstanceName, string oracleInstance, string userName) [Obsolete, compile-error] |
N/A | unitOfWorkInstanceName, oracleInstance, userName — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
AddSqlUnitOfWork(this IServiceCollection services, string unitOfWorkInstanceName, string sqlServerName, string sqlServerInstance, string userName) [Obsolete, compile-error] |
N/A | unitOfWorkInstanceName, sqlServerName, sqlServerInstance, userName — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
AddPostGreSqlUnitOfWork(this IServiceCollection services, string unitOfWorkInstanceName, string serverName, string instance, string userName) [Obsolete, compile-error] |
N/A | unitOfWorkInstanceName, serverName, instance, userName — all accepted but ignored; no registration side effect |
Same file — no registration side effect |
All 13 rows marked [Obsolete, compile-error] above are [Obsolete("Due to functional changes between .net core 2.2 and .net core 3.1, this method is obsolete to avoid startup errors.", true)] on IServicesNhibernateExtensions — calling any of them is a compile-time error (the true argument), and every one of the 13 has zero registration side effect and no service lifetime to report, even though UseOracleSession<T> performs a discarded Assembly.GetAssembly(typeof(T)) call internally before its final no-op delegation (see BR-NH-16). The checked-in README.md still documents this obsolete API and should not be treated as current.*
Service registration catalog¶
| Service type | Implementation | Lifetime | Registered by | Condition | Source |
|---|---|---|---|---|---|
IUnitOfWorkFactory |
factory lambda: new UnitOfWorkFactory(assemblyMappings, debugOutputSql) |
Singleton | AddNhibernateServices (internal AddUnitOfWorkFactory) |
Always | src/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Extensions/IServicesCollectionExtensions.cs |
UnitOfWorkAccessor |
UnitOfWorkAccessor (concrete class, resolves IUnitOfWorkFactory + IOptionsSnapshot<UnitOfWorkOptions> from DI) |
Scoped | AddNhibernateServices |
Always | Same file |
Options configuration¶
| Options type | Named instance | Configured by | Configuration keys / services read | Source |
|---|---|---|---|---|
UnitOfWorkOptions |
One per ConfigureUnitOfWorkOptions subclass's UniqueName, registered by the consuming application via services.ConfigureOptions<TSubclass>() |
Consumer-authored ConfigureUnitOfWorkOptions subclass (IConfigureNamedOptions<UnitOfWorkOptions>) |
None owned by this library — see Configuration for the full UnitOfWorkOptions settings catalog (UO1–UO7) |
src/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Options/ConfigureUnitOfWorkOptions.cs, src/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Options/UnitOfWorkOptions.cs |
Required-but-not-registered services¶
| Service type | Consumer | Expected source |
|---|---|---|
IEnvironmentClient |
Consumer's ConfigureUnitOfWorkOptions subclass constructor |
Host application, typically via SAIF.NetCore.ServiceExtensions registering SAIF.NetCore.EnvironmentClient |
IDBConnectionClient |
Consumer's ConfigureUnitOfWorkOptions subclass constructor |
Host application, typically via SAIF.NetCore.ServiceExtensions registering SAIF.NetCore.DBConnectionClient |
IOptionsSnapshot<UnitOfWorkOptions> / options infrastructure |
UnitOfWorkAccessor |
Host application (ASP.NET Core / Generic Host registers AddOptions by default) |
A ConfigureUnitOfWorkOptions subclass itself |
UnitOfWorkAccessor.UnitOfWork(key) (via IOptionsSnapshot<UnitOfWorkOptions>.Get) |
Host application — one subclass per logical database, registered with services.ConfigureOptions<TSubclass>() |
No startup base classes, feature flags, middleware pipeline, or hosted services/health checks exist in this library — it contributes no IApplicationBuilder or IHostedService surface.
Related documentation¶
- Index
- Overview
- Architecture
- Dependencies
- Configuration
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- API reference
Note: Statements marked with
*were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with**could not be confirmed; treat as unknown until verified.
Sources¶
src/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Extensions/IServicesCollectionExtensions.cssrc/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Extensions/IServicesNhibernateExtensions.cssrc/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/UnitOfWorkAccessor.cssrc/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Options/ConfigureUnitOfWorkOptions.cssrc/SAIF.NetCore.Nhibernate/SAIF.NetCore.NHibernate/SAIF.NetCore.NHibernate/Options/UnitOfWorkOptions.cs