From 0a7a5a090ddec3e9b65b5f014fd03ff6083f4ac0 Mon Sep 17 00:00:00 2001 From: Maximilian Haru Raditya Date: Mon, 11 Dec 2023 01:34:36 +0700 Subject: [PATCH] Refactored code. --- CHANGELOG.md | 6 +- Directory.Packages.props | 8 +- buildscripts/CommonAssemblyInfo.cs | 2 - buildscripts/common.props | 4 +- .../AbstractNHibernateTestCase.cs | 2 +- ...ilities.NHibernateIntegration.Tests.csproj | 38 +-- .../Common/Blog.cs | 2 +- .../Common/BlogItem.cs | 6 +- .../Common/BlogRef.cs | 4 +- .../Common/TestInterceptor.cs | 14 +- .../NHibernateGenericDaoTestCase.cs | 166 ++++++++--- .../AsyncLocalSessionStoreConfiguration.xml | 4 +- .../AsyncLocalSessionStoreTestCase.cs | 20 +- .../CallContextSessionStoreConfiguration.xml | 4 +- .../CallContextSessionStoreTestCase.cs | 25 +- ...alCallContextSessionStoreConfiguration.xml | 4 +- .../LogicalCallContextSessionStoreTestCase.cs | 20 +- .../Internal/SessionManagerTestCase.cs | 182 ++++++------ .../Issues/Facilities103/Fixture.cs | 23 +- .../Issues/Facilities112/Fixture.cs | 10 +- .../Issues/Facilities116/Fixture.cs | 4 +- .../Issues/IssueTestCase.cs | 2 +- .../Program.cs | 2 - .../FacilityFluentConfigTestCase.cs | 10 +- .../SessionCreation/MyDao.cs | 10 +- .../Transactions/Model/RootService.cs | 4 +- .../Transactions/Model/RootService2.cs | 4 +- .../Builders/DefaultConfigurationBuilder.cs | 28 +- .../PersistentConfigurationBuilder.cs | 8 +- .../Builders/XmlConfigurationBuilder.cs | 8 +- ...le.Facilities.NHibernateIntegration.csproj | 20 +- .../Components/Dao/DataException.cs | 2 + .../Components/Dao/IGenericDao.cs | 14 +- .../Components/Dao/INHibernateGenericDao.cs | 60 ++-- .../Components/Dao/NHibernateGenericDao.cs | 199 ++++++++------ .../DefaultSessionManager.cs | 85 +++--- .../ISessionManager.cs | 4 +- .../ISessionStore.cs | 6 +- .../Internal/NHibernateSessionInterceptor.cs | 4 +- .../Internal/SessionDelegate.cs | 39 +-- .../Internal/SessionFactoryActivator.cs | 11 +- .../Internal/StatelessSessionDelegate.cs | 27 +- .../NHibernateFacility.cs | 260 +++++++++--------- .../AbstractDictionaryStackSessionStore.cs | 14 +- .../SessionStores/AbstractSessionStore.cs | 14 +- .../SessionStores/AsyncLocalSessionStore.cs | 4 +- .../SessionStores/CallContextSessionStore.cs | 4 +- .../LogicalCallContextSessionStore.cs | 4 +- .../SessionStores/WebSessionStore.cs | 28 +- .../Util/DictionaryExtensions.cs | 29 ++ .../Util/ReflectionUtility.cs | 4 +- 51 files changed, 798 insertions(+), 658 deletions(-) create mode 100644 src/Castle.Facilities.NHibernateIntegration/Util/DictionaryExtensions.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index f068f68c2..00f3ce237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,19 +28,19 @@ Breaking Changes: - Upgraded [Castle.Facilities.AutoTx] version to 5.3.0 - Replaced ```Castle.Services.Transaction.TransactionMode``` with ```System.Transactions.TransactionScopeOption``` - Replaced ```Castle.Services.Transaction.IsolationMode``` with ```System.Transactions.IsolationLevel``` -- Refactored ```AbstractDictionaryStackSessionStore``` +- Refactored ```Castle.Facilities.NHibernateIntegration.SessionStores.AbstractDictionaryStackSessionStore``` ## 5.2.0 (2022-06-25) Improvements: -- Added ```AsyncLocalSessionStore``` +- Added ```Castle.Facilities.NHibernateIntegration.SessionStores.AsyncLocalSessionStore``` - Updated [Castle.Windsor] version to 5.1.2 - Updated [Castle.Services.Transaction] version to 5.2.0 - Updated [Castle.Facilities.AutoTx] version to 5.2.0 Breaking Changes: -- Set ```AsyncLocalSessionStore``` as the default ```SessionStore``` +- Set ```Castle.Facilities.NHibernateIntegration.SessionStores.AsyncLocalSessionStore``` as the default ```SessionStore``` in ```Castle.Facilities.NHibernateIntegration.NHibernateFacility.DefaultSessionStoreType``` ## 5.1.0 (2022-02-20) diff --git a/Directory.Packages.props b/Directory.Packages.props index 51c09edf1..b832b5a72 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -13,13 +13,16 @@ + + + @@ -28,9 +31,4 @@ - - - - - diff --git a/buildscripts/CommonAssemblyInfo.cs b/buildscripts/CommonAssemblyInfo.cs index 4178669c9..738c6ab4a 100644 --- a/buildscripts/CommonAssemblyInfo.cs +++ b/buildscripts/CommonAssemblyInfo.cs @@ -14,8 +14,6 @@ // limitations under the License. #endregion -using System; - [assembly: CLSCompliant(true)] diff --git a/buildscripts/common.props b/buildscripts/common.props index 59d3b8d57..8a1eaacac 100644 --- a/buildscripts/common.props +++ b/buildscripts/common.props @@ -8,8 +8,8 @@ true latest - disable - disable + enable + enable diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/AbstractNHibernateTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/AbstractNHibernateTestCase.cs index a3d7cf055..75d89ca1e 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/AbstractNHibernateTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/AbstractNHibernateTestCase.cs @@ -78,7 +78,7 @@ public virtual void TearDown() OnTearDown(); DropDatabaseSchemas(); Container.Dispose(); - Container = null; + Container = null!; } protected virtual void OnTearDown() diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Castle.Facilities.NHibernateIntegration.Tests.csproj b/src/Castle.Facilities.NHibernateIntegration.Tests/Castle.Facilities.NHibernateIntegration.Tests.csproj index a92877448..45154fe0d 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Castle.Facilities.NHibernateIntegration.Tests.csproj +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Castle.Facilities.NHibernateIntegration.Tests.csproj @@ -16,27 +16,31 @@ - - - - - - - - - - - - + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - + + + + + diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/Blog.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/Blog.cs index 2c0f68fce..be918b9ed 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/Blog.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/Blog.cs @@ -27,7 +27,7 @@ public Blog() public virtual int Id { get; set; } - public virtual string Name { get; set; } + public virtual string Name { get; set; } = string.Empty; public virtual IList Items { get; set; } } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogItem.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogItem.cs index f02a5887e..45541f712 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogItem.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogItem.cs @@ -22,11 +22,11 @@ public class BlogItem { public virtual int Id { get; set; } - public virtual Blog ParentBlog { get; set; } + public virtual Blog? ParentBlog { get; set; } - public virtual string Title { get; set; } + public virtual string Title { get; set; } = string.Empty; - public virtual string Text { get; set; } + public virtual string Text { get; set; } = string.Empty; public virtual DateTime DateTime { get; set; } } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogRef.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogRef.cs index 3447a4ecc..0182947fe 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogRef.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/BlogRef.cs @@ -20,8 +20,8 @@ public class BlogRef { public virtual int Id { get; set; } - public virtual Blog ParentBlog { get; set; } + public virtual Blog? ParentBlog { get; set; } - public virtual string Title { get; set; } + public virtual string Title { get; set; } = string.Empty; } } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/TestInterceptor.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/TestInterceptor.cs index dda42f0fd..cdd9f30ea 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Common/TestInterceptor.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Common/TestInterceptor.cs @@ -47,17 +47,17 @@ public void ResetState() #region IInterceptor Members - public override int[] FindDirty(object entity, - object id, - object[] currentState, - object[] previousState, - string[] propertyNames, - IType[] types) + public override int[]? FindDirty(object entity, + object id, + object[] currentState, + object[] previousState, + string[] propertyNames, + IType[] types) { return null; } - public override object Instantiate(string clazz, object id) + public override object? Instantiate(string clazz, object id) { _instantiationCall = true; diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Components/NHibernateGenericDaoTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Components/NHibernateGenericDaoTestCase.cs index 44e0e57d3..f265fceb7 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Components/NHibernateGenericDaoTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Components/NHibernateGenericDaoTestCase.cs @@ -34,9 +34,9 @@ private class NonPersistentClass { } - private ISessionManager _sessionManager; - private NHibernateGenericDao _nhGenericDao1; - private NHibernateGenericDao _nhGenericDao2; + private ISessionManager _sessionManager = null!; + private NHibernateGenericDao _nhGenericDao1 = null!; + private NHibernateGenericDao _nhGenericDao2 = null!; protected override void OnSetUp() { @@ -104,7 +104,9 @@ public void SetUppedCorrectly() public void CanGetById() { using var session = _sessionManager.OpenSession(); - var blog = _nhGenericDao1.FindById(typeof(Blog), 1) as Blog; + + var blog = (Blog) _nhGenericDao1.FindById(typeof(Blog), 1)!; + Assert.That(blog.Id, Is.EqualTo(1)); } @@ -112,46 +114,61 @@ public void CanGetById() public void CanInitializeLazyProperty() { using var session = _sessionManager.OpenSession(); - var b = _nhGenericDao1.FindById(typeof(Blog), 1) as Blog; - Assert.That(NHibernateUtil.IsInitialized(b.Items), Is.False); - _nhGenericDao1.InitializeLazyProperty(b, "Items"); - Assert.That(NHibernateUtil.IsInitialized(b.Items), Is.True); + var blog = (Blog) _nhGenericDao1.FindById(typeof(Blog), 1)!; + + Assert.That(NHibernateUtil.IsInitialized(blog.Items), Is.False); + + _nhGenericDao1.InitializeLazyProperty(blog, "Items"); + + Assert.That(NHibernateUtil.IsInitialized(blog.Items), Is.True); } [Test] public void ThrowsExceptionOnNonExistingProperty() { using var session = _sessionManager.OpenSession(); - var b = _nhGenericDao1.FindById(typeof(Blog), 1) as Blog; - Assert.Throws(() => _nhGenericDao1.InitializeLazyProperty(b, "Bla")); + + var blog = (Blog) _nhGenericDao1.FindById(typeof(Blog), 1)!; + + Assert.Throws( + () => _nhGenericDao1.InitializeLazyProperty(blog, "Bla")); } [Test] public void ThrowsExceptionWhenNullInstance() { using var session = _sessionManager.OpenSession(); - var b = _nhGenericDao1.FindById(typeof(Blog), 1) as Blog; - Assert.Throws(() => _nhGenericDao1.InitializeLazyProperty(null, "Items")); - Assert.Throws(() => _nhGenericDao1.InitializeLazyProperty(b, null)); + + var blog = (Blog) _nhGenericDao1.FindById(typeof(Blog), 1)!; + + Assert.Throws( + () => _nhGenericDao1.InitializeLazyProperty(null, "Items")); + Assert.Throws( + () => _nhGenericDao1.InitializeLazyProperty(blog, null)); } [Test] public void ThrowsExceptionWhenNullInstance2() { using var session = _sessionManager.OpenSession(); - Assert.Throws(() => _nhGenericDao1.InitializeLazyProperties(null)); + + Assert.Throws( + () => _nhGenericDao1.InitializeLazyProperties(null)); } [Test] public void CanInitializeAllLazyProperties() { using var session = _sessionManager.OpenSession(); - var b = _nhGenericDao1.FindById(typeof(Blog), 1) as Blog; - Assert.That(NHibernateUtil.IsInitialized(b.Items), Is.False); - _nhGenericDao1.InitializeLazyProperties(b); - Assert.That(NHibernateUtil.IsInitialized(b.Items), Is.True); + var blog = (Blog) _nhGenericDao1.FindById(typeof(Blog), 1)!; + + Assert.That(NHibernateUtil.IsInitialized(blog.Items), Is.False); + + _nhGenericDao1.InitializeLazyProperties(blog); + + Assert.That(NHibernateUtil.IsInitialized(blog.Items), Is.True); } [Test] @@ -159,13 +176,15 @@ public void CanSaveNewItem() { using var session = _sessionManager.OpenSession(); using var transaction = session.BeginTransaction(); - var b = new Blog + + var blog = new Blog { Name = "blah" }; - _nhGenericDao1.Save(b); - Assert.That(b.Id, Is.GreaterThan(0)); + _nhGenericDao1.Save(blog); + + Assert.That(blog.Id, Is.GreaterThan(0)); transaction.Rollback(); } @@ -175,14 +194,18 @@ public void CanSaveNewItem() public void CannotSaveNull() { using var session = _sessionManager.OpenSession(); - Assert.Throws(() => _nhGenericDao1.Save(new NonPersistentClass())); + + Assert.Throws( + () => _nhGenericDao1.Save(new NonPersistentClass())); } [Test] public void CanFindAll() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(Blog)); + Assert.That(results, Has.Length.EqualTo(3)); } @@ -190,46 +213,54 @@ public void CanFindAll() public void CanFindAllWithCriterion() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(Blog), new[] { Restrictions.Eq("Name", "myblog2") }); + Assert.That(results, Has.Length.EqualTo(1)); - Assert.That(((Blog) results.GetValue(0)).Name, Is.EqualTo("myblog2")); + Assert.That(((Blog) results.GetValue(0)!).Name, Is.EqualTo("myblog2")); } [Test] public void CanFindAllWithCriterionOrderBy() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, - new[] { Order.Desc("Title") }); + [Order.Desc("Title")]); + Assert.That(results, Has.Length.EqualTo(2)); - Assert.That(((BlogItem) results.GetValue(0)).Title, Is.EqualTo("mytitle2")); - Assert.That(((BlogItem) results.GetValue(1)).Title, Is.EqualTo("mytitle1")); + Assert.That(((BlogItem) results.GetValue(0)!).Title, Is.EqualTo("mytitle2")); + Assert.That(((BlogItem) results.GetValue(1)!).Title, Is.EqualTo("mytitle1")); } [Test] public void CanFindAllWithCriterionOrderByLimits() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, - new[] { Order.Desc("Title") }, + [Order.Desc("Title")], 1, 1); + Assert.That(results, Has.Length.EqualTo(1)); - Assert.That(((BlogItem) results.GetValue(0)).Title, Is.EqualTo("mytitle1")); + Assert.That(((BlogItem) results.GetValue(0)!).Title, Is.EqualTo("mytitle1")); } [Test] public void CanFindAllWithCriterionOrderByLimitsOutOfRangeReturnsEmptyArray() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, - new[] { Order.Desc("Title") }, + [Order.Desc("Title")], 2, 3); + Assert.That(results, Has.Length.EqualTo(0)); } @@ -237,9 +268,11 @@ public void CanFindAllWithCriterionOrderByLimitsOutOfRangeReturnsEmptyArray() public void CanFindAllWithLimits() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(BlogItem), 1, 2); + Assert.That(results, Has.Length.EqualTo(2)); } @@ -247,9 +280,11 @@ public void CanFindAllWithLimits() public void CanFindAllWithLimitsOutOfRangeReturnsEmptyArray() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(BlogItem), 3, 4); + Assert.That(results, Has.Length.EqualTo(0)); } @@ -257,19 +292,23 @@ public void CanFindAllWithLimitsOutOfRangeReturnsEmptyArray() public void CanFindAllWithCriterionLimit() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAll(typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, 0, 1); + Assert.That(results, Has.Length.EqualTo(1)); - Assert.That(((BlogItem) results.GetValue(0)).Title, Is.EqualTo("mytitle1")); + Assert.That(((BlogItem) results.GetValue(0)!).Title, Is.EqualTo("mytitle1")); } [Test] public void FindAllWithCustomQuery() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAllWithCustomQuery("from BlogItem b where b.Text='Hello'"); + Assert.That(results, Has.Length.EqualTo(2)); } @@ -277,7 +316,9 @@ public void FindAllWithCustomQuery() public void FindAllWithCustomQueryLimits() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAllWithCustomQuery("from BlogItem b where b.Text='Hello'", 1, 1); + Assert.That(results, Has.Length.EqualTo(1)); } @@ -295,6 +336,7 @@ public void DeleteAllWithType() using (var session = _sessionManager.OpenSession()) { var results = _nhGenericDao1.FindAll(typeof(Blog)); + Assert.That(results, Has.Length.EqualTo(0)); } } @@ -305,6 +347,7 @@ public void Delete() using (var session = _sessionManager.OpenSession()) { var results = _nhGenericDao1.FindAll(typeof(Blog)); + Assert.That(results, Has.Length.EqualTo(3)); } @@ -321,6 +364,7 @@ public void Delete() using (var session = _sessionManager.OpenSession()) { var results = _nhGenericDao1.FindAll(typeof(Blog)); + Assert.That(results, Has.Length.EqualTo(2)); } } @@ -329,16 +373,20 @@ public void Delete() public void CreateSavesObjectInTheDatabase() { using var session = _sessionManager.OpenSession(); - var b = new Blog { Name = "myblog4" }; - var id = _nhGenericDao1.Create(b); - Assert.That(id, Is.GreaterThan(0)); + + var blog = new Blog { Name = "myblog4" }; + var blogId = _nhGenericDao1.Create(blog); + + Assert.That(blogId, Is.GreaterThan(0)); } [Test] public void GetByNamedQuery() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAllWithNamedQuery("getAllBlogs"); + Assert.That(results, Has.Length.EqualTo(3)); } @@ -346,21 +394,27 @@ public void GetByNamedQuery() public void GetByNamedQueryThrowsExceptionWhenNullParameter() { using var session = _sessionManager.OpenSession(); - Assert.Throws(() => _nhGenericDao1.FindAllWithNamedQuery(null)); + + Assert.Throws( + () => _nhGenericDao1.FindAllWithNamedQuery(null)); } [Test] public void GetByNamedQueryThrowsExceptionWhenNonExistingQuery() { using var session = _sessionManager.OpenSession(); - Assert.Throws(() => _nhGenericDao1.FindAllWithNamedQuery("getMyBlogs")); + + Assert.Throws( + () => _nhGenericDao1.FindAllWithNamedQuery("getMyBlogs")); } [Test] public void GetByNamedQueryWithLimits() { using var session = _sessionManager.OpenSession(); + var results = _nhGenericDao1.FindAllWithNamedQuery("getAllBlogs", 1, 2); + Assert.That(results, Has.Length.EqualTo(2)); } @@ -369,7 +423,9 @@ public void GetByNamedQueryWithLimits() public void CanFindAllStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllStateless(typeof(Blog)); + Assert.That(results, Has.Length.EqualTo(3)); } @@ -377,45 +433,53 @@ public void CanFindAllStateless() public void CanFindAllWithCriterionStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllStateless( typeof(Blog), new[] { Restrictions.Eq("Name", "myblog2") }); + Assert.That(results, Has.Length.EqualTo(1)); - Assert.That(((Blog) results.GetValue(0)).Name, Is.EqualTo("myblog2")); + Assert.That(((Blog) results.GetValue(0)!).Name, Is.EqualTo("myblog2")); } [Test] public void CanFindAllWithCriterionOrderByStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllStateless( typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, - new[] { Order.Desc("Title") }); + [Order.Desc("Title")]); + Assert.That(results, Has.Length.EqualTo(2)); - Assert.That(((BlogItem) results.GetValue(0)).Title, Is.EqualTo("mytitle2")); - Assert.That(((BlogItem) results.GetValue(1)).Title, Is.EqualTo("mytitle1")); + Assert.That(((BlogItem) results.GetValue(0)!).Title, Is.EqualTo("mytitle2")); + Assert.That(((BlogItem) results.GetValue(1)!).Title, Is.EqualTo("mytitle1")); } [Test] public void CanFindAllWithCriterionOrderByLimitsStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAll(typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, - new[] { Order.Desc("Title") }, 1, 1); + [Order.Desc("Title")], 1, 1); + Assert.That(results, Has.Length.EqualTo(1)); - Assert.That(((BlogItem) results.GetValue(0)).Title, Is.EqualTo("mytitle1")); + Assert.That(((BlogItem) results.GetValue(0)!).Title, Is.EqualTo("mytitle1")); } [Test] public void CanFindAllWithCriterionOrderByLimitsOutOfRangeReturnsEmptyArrayStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllStateless( typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, - new[] { Order.Desc("Title") }, 2, 3); + [Order.Desc("Title")], 2, 3); + Assert.That(results, Has.Length.EqualTo(0)); } @@ -423,9 +487,11 @@ public void CanFindAllWithCriterionOrderByLimitsOutOfRangeReturnsEmptyArrayState public void CanFindAllWithLimitsStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllStateless(typeof(BlogItem), 1, 2); + Assert.That(results, Has.Length.EqualTo(2)); } @@ -433,9 +499,11 @@ public void CanFindAllWithLimitsStateless() public void CanFindAllWithLimitsOutOfRangeReturnsEmptyArrayStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllStateless(typeof(BlogItem), 3, 4); + Assert.That(results, Has.Length.EqualTo(0)); } @@ -443,19 +511,23 @@ public void CanFindAllWithLimitsOutOfRangeReturnsEmptyArrayStateless() public void CanFindAllWithCriterionLimitStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllStateless(typeof(BlogItem), new[] { Restrictions.Eq("Text", "Hello") }, 0, 1); + Assert.That(results, Has.Length.EqualTo(1)); - Assert.That(((BlogItem) results.GetValue(0)).Title, Is.EqualTo("mytitle1")); + Assert.That(((BlogItem) results.GetValue(0)!).Title, Is.EqualTo("mytitle1")); } [Test] public void FindAllWithCustomQueryStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllWithCustomQueryStateless("from BlogItem b where b.Text='Hello'"); + Assert.That(results, Has.Length.EqualTo(2)); } @@ -463,7 +535,9 @@ public void FindAllWithCustomQueryStateless() public void FindAllWithCustomQueryLimitsStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllWithCustomQueryStateless("from BlogItem b where b.Text='Hello'", 1, 1); + Assert.That(results, Has.Length.EqualTo(1)); } @@ -471,7 +545,9 @@ public void FindAllWithCustomQueryLimitsStateless() public void GetByNamedQueryStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllWithNamedQueryStateless("getAllBlogs"); + Assert.That(results, Has.Length.EqualTo(3)); } @@ -479,6 +555,7 @@ public void GetByNamedQueryStateless() public void GetByNamedQueryThrowsExceptionWhenNullParameterStateless() { using var session = _sessionManager.OpenStatelessSession(); + Assert.Throws(() => _nhGenericDao1.FindAllWithNamedQueryStateless(null)); } @@ -486,6 +563,7 @@ public void GetByNamedQueryThrowsExceptionWhenNullParameterStateless() public void GetByNamedQueryThrowsExceptionWhenNonExistingQueryStateless() { using var session = _sessionManager.OpenStatelessSession(); + Assert.Throws(() => _nhGenericDao1.FindAllWithNamedQueryStateless("getMyBlogs")); } @@ -493,7 +571,9 @@ public void GetByNamedQueryThrowsExceptionWhenNonExistingQueryStateless() public void GetByNamedQueryWithLimitsStateless() { using var session = _sessionManager.OpenStatelessSession(); + var results = _nhGenericDao1.FindAllWithNamedQueryStateless("getAllBlogs", 1, 2); + Assert.That(results, Has.Length.EqualTo(2)); } } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreConfiguration.xml b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreConfiguration.xml index af063d460..461a5be50 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreConfiguration.xml +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreConfiguration.xml @@ -9,8 +9,8 @@ + configurationBuilder="Castle.Facilities.NHibernateIntegration.Tests.TestConfigurationBuilder, Castle.Facilities.NHibernateIntegration.Tests" + sessionStore="Castle.Facilities.NHibernateIntegration.SessionStores.AsyncLocalSessionStore, Castle.Facilities.NHibernateIntegration"> diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreTestCase.cs index 4fa23d157..7eb5121c4 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/AsyncLocalSessionStoreTestCase.cs @@ -55,7 +55,7 @@ public void FindCompatibleSession() var store = Container.Resolve(); var factory = Container.Resolve(); - ISession session1 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session1 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session1, Is.Null); session1 = factory.OpenSession(); @@ -63,7 +63,7 @@ public void FindCompatibleSession() store.Store(Constants.DefaultAlias, sessionDelegate1); Assert.That(sessionDelegate1.SessionStoreCookie, Is.Not.Null); - ISession session2 = store.FindCompatibleSession("something in the way she moves"); + ISession? session2 = store.FindCompatibleSession("something in the way she moves"); Assert.That(session2, Is.Null); session2 = store.FindCompatibleSession(Constants.DefaultAlias); @@ -89,7 +89,7 @@ public void FindCompatibleSessionWithTwoThreads() var session1 = factory.OpenSession(); var sessionDelegate1 = new SessionDelegate(session1, store, true); store.Store(Constants.DefaultAlias, sessionDelegate1); - ISession session2 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session2 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); Assert.That(session2, Is.SameAs(sessionDelegate1)); @@ -107,10 +107,10 @@ private void FindCompatibleSessionOnOtherThread() { var store = Container.Resolve(); - ISession session1 = store.FindCompatibleSession("something in the way she moves"); + ISession? session1 = store.FindCompatibleSession("something in the way she moves"); Assert.That(session1, Is.Null); - ISession session2 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session2 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); _event.Set(); @@ -130,7 +130,7 @@ public void FindCompatibleStatelessSession() var store = Container.Resolve(); var factory = Container.Resolve(); - IStatelessSession session1 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session1 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session1, Is.Null); session1 = factory.OpenStatelessSession(); @@ -138,7 +138,7 @@ public void FindCompatibleStatelessSession() store.Store(Constants.DefaultAlias, sessionDelegate1); Assert.That(sessionDelegate1.SessionStoreCookie, Is.Not.Null); - IStatelessSession session2 = store.FindCompatibleStatelessSession("something in the way she moves"); + IStatelessSession? session2 = store.FindCompatibleStatelessSession("something in the way she moves"); Assert.That(session2, Is.Null); session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); @@ -165,7 +165,7 @@ public void FindCompatibleStatelessSessionWithTwoThreads() var sessionDelegate1 = new StatelessSessionDelegate(session1, store, true); store.Store(Constants.DefaultAlias, sessionDelegate1); - IStatelessSession session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); Assert.That(session2, Is.SameAs(sessionDelegate1)); @@ -183,10 +183,10 @@ private void FindCompatibleStatelessSessionOnOtherThread() { var store = Container.Resolve(); - IStatelessSession session1 = store.FindCompatibleStatelessSession("something in the way she moves"); + IStatelessSession? session1 = store.FindCompatibleStatelessSession("something in the way she moves"); Assert.That(session1, Is.Null); - IStatelessSession session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); _event.Set(); diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreConfiguration.xml b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreConfiguration.xml index e0711596f..1a9dde828 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreConfiguration.xml +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreConfiguration.xml @@ -9,8 +9,8 @@ + configurationBuilder="Castle.Facilities.NHibernateIntegration.Tests.TestConfigurationBuilder, Castle.Facilities.NHibernateIntegration.Tests" + sessionStore="Castle.Facilities.NHibernateIntegration.SessionStores.CallContextSessionStore, Castle.Facilities.NHibernateIntegration"> diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreTestCase.cs index e1c57dd77..3532f5b1c 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/CallContextSessionStoreTestCase.cs @@ -14,9 +14,9 @@ // limitations under the License. #endregion +#if NETFRAMEWORK namespace Castle.Facilities.NHibernateIntegration.Tests.Internals { -#if NETFRAMEWORK using System; using System.Threading; @@ -54,7 +54,7 @@ public void FindCompatibleSession() var store = Container.Resolve(); var factory = Container.Resolve(); - ISession session1 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session1 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session1, Is.Null); session1 = factory.OpenSession(); @@ -62,7 +62,7 @@ public void FindCompatibleSession() store.Store(Constants.DefaultAlias, sessionDelegate1); Assert.That(sessionDelegate1.SessionStoreCookie, Is.Not.Null); - ISession session2 = store.FindCompatibleSession("something in the way she moves"); + ISession? session2 = store.FindCompatibleSession("something in the way she moves"); Assert.That(session2, Is.Null); session2 = store.FindCompatibleSession(Constants.DefaultAlias); @@ -88,7 +88,8 @@ public void FindCompatibleSessionWithTwoThreads() var session1 = factory.OpenSession(); var sessionDelegate1 = new SessionDelegate(session1, store, true); store.Store(Constants.DefaultAlias, sessionDelegate1); - ISession session2 = store.FindCompatibleSession(Constants.DefaultAlias); + + ISession? session2 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); Assert.That(session2, Is.SameAs(sessionDelegate1)); @@ -106,10 +107,10 @@ private void FindCompatibleSessionOnOtherThread() { var store = Container.Resolve(); - ISession session1 = store.FindCompatibleSession("something in the way she moves"); + ISession? session1 = store.FindCompatibleSession("something in the way she moves"); Assert.That(session1, Is.Null); - ISession session2 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session2 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session2, Is.Null); _event.Set(); @@ -129,7 +130,7 @@ public void FindCompatibleStatelessSession() var store = Container.Resolve(); var factory = Container.Resolve(); - IStatelessSession session1 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session1 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session1, Is.Null); session1 = factory.OpenStatelessSession(); @@ -137,7 +138,7 @@ public void FindCompatibleStatelessSession() store.Store(Constants.DefaultAlias, sessionDelegate1); Assert.That(sessionDelegate1.SessionStoreCookie, Is.Not.Null); - IStatelessSession session2 = store.FindCompatibleStatelessSession("something in the way she moves"); + IStatelessSession? session2 = store.FindCompatibleStatelessSession("something in the way she moves"); Assert.That(session2, Is.Null); session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); @@ -164,7 +165,7 @@ public void FindCompatibleStatelessSessionWithTwoThreads() var sessionDelegate1 = new StatelessSessionDelegate(session1, store, true); store.Store(Constants.DefaultAlias, sessionDelegate1); - IStatelessSession session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); Assert.That(session2, Is.SameAs(sessionDelegate1)); @@ -182,14 +183,14 @@ private void FindCompatibleStatelessSessionOnOtherThread() { var store = Container.Resolve(); - IStatelessSession session1 = store.FindCompatibleStatelessSession("something in the way she moves"); + IStatelessSession? session1 = store.FindCompatibleStatelessSession("something in the way she moves"); Assert.That(session1, Is.Null); - IStatelessSession session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session2, Is.Null); _event.Set(); } } -#endif } +#endif diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreConfiguration.xml b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreConfiguration.xml index 567a95772..7667bc9c2 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreConfiguration.xml +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreConfiguration.xml @@ -9,8 +9,8 @@ + configurationBuilder="Castle.Facilities.NHibernateIntegration.Tests.TestConfigurationBuilder, Castle.Facilities.NHibernateIntegration.Tests" + sessionStore="Castle.Facilities.NHibernateIntegration.SessionStores.LogicalCallContextSessionStore, Castle.Facilities.NHibernateIntegration"> diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreTestCase.cs index 797f85d1f..8dc1cfc2d 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/LogicalCallContextSessionStoreTestCase.cs @@ -56,7 +56,7 @@ public void FindCompatibleSession() var store = Container.Resolve(); var factory = Container.Resolve(); - ISession session1 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session1 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session1, Is.Null); session1 = factory.OpenSession(); @@ -64,7 +64,7 @@ public void FindCompatibleSession() store.Store(Constants.DefaultAlias, sessionDelegate1); Assert.That(sessionDelegate1.SessionStoreCookie, Is.Not.Null); - ISession session2 = store.FindCompatibleSession("something in the way she moves"); + ISession? session2 = store.FindCompatibleSession("something in the way she moves"); Assert.That(session2, Is.Null); session2 = store.FindCompatibleSession(Constants.DefaultAlias); @@ -91,7 +91,7 @@ public void FindCompatibleSessionWithTwoThreads() var sessionDelegate1 = new SessionDelegate(session1, store, true); store.Store(Constants.DefaultAlias, sessionDelegate1); - ISession session2 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session2 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); Assert.That(session2, Is.SameAs(sessionDelegate1)); @@ -109,10 +109,10 @@ private void FindCompatibleSessionOnOtherThread() { var store = Container.Resolve(); - ISession session1 = store.FindCompatibleSession("something in the way she moves"); + ISession? session1 = store.FindCompatibleSession("something in the way she moves"); Assert.That(session1, Is.Null); - ISession session2 = store.FindCompatibleSession(Constants.DefaultAlias); + ISession? session2 = store.FindCompatibleSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); _event.Set(); @@ -132,7 +132,7 @@ public void FindCompatibleStatelessSession() var store = Container.Resolve(); var factory = Container.Resolve(); - IStatelessSession session1 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session1 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session1, Is.Null); session1 = factory.OpenStatelessSession(); @@ -140,7 +140,7 @@ public void FindCompatibleStatelessSession() store.Store(Constants.DefaultAlias, sessionDelegate1); Assert.That(sessionDelegate1.SessionStoreCookie, Is.Not.Null); - IStatelessSession session2 = store.FindCompatibleStatelessSession("something in the way she moves"); + IStatelessSession? session2 = store.FindCompatibleStatelessSession("something in the way she moves"); Assert.That(session2, Is.Null); session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); @@ -166,7 +166,7 @@ public void FindCompatibleStatelessSessionWithTwoThreads() var session1 = factory.OpenStatelessSession(); var sessionDelegate1 = new StatelessSessionDelegate(session1, store, true); store.Store(Constants.DefaultAlias, sessionDelegate1); - IStatelessSession session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); Assert.That(session2, Is.SameAs(sessionDelegate1)); @@ -185,10 +185,10 @@ private void FindCompatibleStatelessSessionOnOtherThread() { var store = Container.Resolve(); - IStatelessSession session1 = store.FindCompatibleStatelessSession("something in the way she moves"); + IStatelessSession? session1 = store.FindCompatibleStatelessSession("something in the way she moves"); Assert.That(session1, Is.Null); - IStatelessSession session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); + IStatelessSession? session2 = store.FindCompatibleStatelessSession(Constants.DefaultAlias); Assert.That(session2, Is.Not.Null); _event.Set(); diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/SessionManagerTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/SessionManagerTestCase.cs index 2c38b81d2..efb08b05d 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/SessionManagerTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Internal/SessionManagerTestCase.cs @@ -70,12 +70,13 @@ public void NewTransactionAfterUsingSession() var session1 = manager.OpenSession(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); - transaction.Begin(); + Assert.That(tx, Is.Not.Null); + + tx.Begin(); // Nested using (var session2 = manager.OpenSession()) @@ -83,19 +84,21 @@ public void NewTransactionAfterUsingSession() Assert.That(session2, Is.Not.Null); Assert.That(session1, Is.Not.Null); - var transaction1 = session1.GetCurrentTransaction(); - Assert.That(transaction1, Is.Not.Null, - "After requesting compatible session, first session is enlisted in transaction too."); - Assert.That(transaction1.IsActive, Is.True, - "After requesting compatible session, first session is enlisted in transaction too."); + var tx1 = session1.GetCurrentTransaction(); + + Assert.That(tx1, Is.Not.Null, + "After requesting compatible session, first session is enlisted in transaction too."); + Assert.That(tx1.IsActive, Is.True, + "After requesting compatible session, first session is enlisted in transaction too."); using (var session3 = manager.OpenSession()) { Assert.That(session3, Is.Not.Null); - var transaction3 = session3.GetCurrentTransaction(); - Assert.That(transaction3, Is.Not.Null); - Assert.That(transaction3.IsActive, Is.True); + var tx3 = session3.GetCurrentTransaction(); + + Assert.That(tx3, Is.Not.Null); + Assert.That(tx3.IsActive, Is.True); } var sessionDelegate1 = (SessionDelegate) session1; @@ -104,9 +107,9 @@ public void NewTransactionAfterUsingSession() Assert.That(sessionDelegate2.InnerSession, Is.SameAs(sessionDelegate1.InnerSession)); } - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); Assert.That(session1.IsConnected, Is.True); session1.Dispose(); @@ -125,12 +128,13 @@ public void NewTransactionAfterUsingStatelessSession() var session1 = manager.OpenStatelessSession(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); - transaction.Begin(); + Assert.That(tx, Is.Not.Null); + + tx.Begin(); // Nested using (var session2 = manager.OpenStatelessSession()) @@ -138,19 +142,21 @@ public void NewTransactionAfterUsingStatelessSession() Assert.That(session2, Is.Not.Null); Assert.That(session1, Is.Not.Null); - var transaction1 = session1.GetCurrentTransaction(); - Assert.That(transaction1, Is.Not.Null, - "After requesting compatible session, first session is enlisted in transaction too."); - Assert.That(transaction1.IsActive, Is.True, - "After requesting compatible session, first session is enlisted in transaction too."); + var tx1 = session1.GetCurrentTransaction(); + + Assert.That(tx1, Is.Not.Null, + "After requesting compatible session, first session is enlisted in transaction too."); + Assert.That(tx1.IsActive, Is.True, + "After requesting compatible session, first session is enlisted in transaction too."); using (var session3 = manager.OpenSession()) { Assert.That(session3, Is.Not.Null); - var transaction3 = session3.GetCurrentTransaction(); - Assert.That(transaction3, Is.Not.Null); - Assert.That(transaction3.IsActive, Is.True); + var tx3 = session3.GetCurrentTransaction(); + + Assert.That(tx3, Is.Not.Null); + Assert.That(tx3.IsActive, Is.True); } var sessionDelegate1 = (StatelessSessionDelegate) session1; @@ -158,9 +164,9 @@ public void NewTransactionAfterUsingStatelessSession() Assert.That(sessionDelegate2.InnerSession, Is.SameAs(sessionDelegate1.InnerSession)); } - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); Assert.That(session1.IsConnected, Is.True); session1.Dispose(); @@ -177,21 +183,23 @@ public void NewTransactionBeforeUsingSession() { var manager = Container.Resolve(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); + + Assert.That(tx, Is.Not.Null); - transaction.Begin(); + tx.Begin(); var session = manager.OpenSession(); + Assert.That(session, Is.Not.Null); Assert.That(session.GetCurrentTransaction(), Is.Not.Null); Assert.That(session.IsConnected, Is.True); - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); session.Dispose(); @@ -206,26 +214,29 @@ public void NewTransactionBeforeUsingSessionWithTwoDatabases() { var manager = Container.Resolve(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); - transaction.Begin(); + Assert.That(tx, Is.Not.Null); + + tx.Begin(); var session1 = manager.OpenSession(); + Assert.That(session1, Is.Not.Null); Assert.That(session1.GetCurrentTransaction(), Is.Not.Null); Assert.That(session1.IsConnected, Is.True); var session2 = manager.OpenSession("db2"); + Assert.That(session2, Is.Not.Null); Assert.That(session2.GetCurrentTransaction(), Is.Not.Null); Assert.That(session2.IsConnected, Is.True); - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); session2.Dispose(); session1.Dispose(); @@ -242,21 +253,23 @@ public void NewTransactionBeforeUsingStatelessSession() { var manager = Container.Resolve(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); + + Assert.That(tx, Is.Not.Null); - transaction.Begin(); + tx.Begin(); var session = manager.OpenStatelessSession(); + Assert.That(session, Is.Not.Null); Assert.That(session.GetCurrentTransaction(), Is.Not.Null); Assert.That(session.IsConnected, Is.True); - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); session.Dispose(); @@ -271,26 +284,29 @@ public void NewTransactionBeforeUsingStatelessSessionWithTwoDatabases() { var manager = Container.Resolve(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); - transaction.Begin(); + Assert.That(tx, Is.Not.Null); + + tx.Begin(); var session1 = manager.OpenStatelessSession(); + Assert.That(session1, Is.Not.Null); Assert.That(session1.GetCurrentTransaction(), Is.Not.Null); Assert.That(session1.IsConnected, Is.True); var session2 = manager.OpenStatelessSession("db2"); + Assert.That(session2, Is.Not.Null); Assert.That(session2.GetCurrentTransaction(), Is.Not.Null); Assert.That(session2.IsConnected, Is.True); - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); session2.Dispose(); session1.Dispose(); @@ -303,7 +319,8 @@ public void NonExistentAliasSession() { var manager = Container.Resolve(); - Assert.Throws(() => manager.OpenSession("something in the way she moves")); + Assert.Throws( + () => manager.OpenSession("something in the way she moves")); } [Test] @@ -311,7 +328,8 @@ public void NonExistentAliasStatelessSession() { var manager = Container.Resolve(); - Assert.Throws(() => manager.OpenStatelessSession("something in the way she moves")); + Assert.Throws( + () => manager.OpenStatelessSession("something in the way she moves")); } [Test] @@ -350,12 +368,13 @@ public void SecondDatabaseSessionEnlistedOnlyOnceInActualTransaction() { var manager = Container.Resolve(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); + + Assert.That(tx, Is.Not.Null); - transaction.Begin(); + tx.Begin(); // Open connection to first database and enlist session in running transaction. var session1 = manager.OpenSession(); @@ -373,16 +392,17 @@ public void SecondDatabaseSessionEnlistedOnlyOnceInActualTransaction() { Assert.That(session3, Is.Not.Null); - var transaction3 = session3.GetCurrentTransaction(); - Assert.That(transaction3, Is.Not.Null); - Assert.That(transaction3.IsActive, Is.True); + var tx3 = session3.GetCurrentTransaction(); + + Assert.That(tx3, Is.Not.Null); + Assert.That(tx3.IsActive, Is.True); } Assert.That(session1.IsConnected, Is.True); - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); session1.Dispose(); @@ -398,12 +418,13 @@ public void SecondDatabaseStatelessSessionEnlistedOnlyOnceInActualTransaction() { var manager = Container.Resolve(); - var transactionManager = Container.Resolve(); - var transaction = - transactionManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, - System.Transactions.IsolationLevel.Serializable); + var txManager = Container.Resolve(); + var tx = txManager.CreateTransaction(System.Transactions.TransactionScopeOption.Required, + System.Transactions.IsolationLevel.Serializable); - transaction.Begin(); + Assert.That(tx, Is.Not.Null); + + tx.Begin(); // Open connection to first database and enlist session in running transaction. var session1 = manager.OpenStatelessSession(); @@ -421,16 +442,17 @@ public void SecondDatabaseStatelessSessionEnlistedOnlyOnceInActualTransaction() { Assert.That(session3, Is.Not.Null); - var transaction3 = session3.GetCurrentTransaction(); - Assert.That(transaction3, Is.Not.Null); - Assert.That(transaction3.IsActive, Is.True); + var tx3 = session3.GetCurrentTransaction(); + + Assert.That(tx3, Is.Not.Null); + Assert.That(tx3.IsActive, Is.True); } Assert.That(session1.IsConnected, Is.True); - transaction.Commit(); + tx.Commit(); - Assert.That(transaction.Status == TransactionStatus.Committed, Is.True); + Assert.That(tx.Status == TransactionStatus.Committed, Is.True); session1.Dispose(); diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities103/Fixture.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities103/Fixture.cs index 2f5808c49..d3c475ccb 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities103/Fixture.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities103/Fixture.cs @@ -17,7 +17,6 @@ namespace Castle.Facilities.NHibernateIntegration.Tests.Issues.Facilities103 { using System; - using System.Collections; using System.Data; using Castle.Facilities.NHibernateIntegration.SessionStores; @@ -44,16 +43,16 @@ public class DefaultSessionManagerTestCase : IssueTestCase private const System.Transactions.IsolationLevel DefaultTransactionIsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted; private const IsolationLevel DefaultDataIsolationLevel = IsolationLevel.ReadUncommitted; - private IKernel _kernel; - private ITransactionManager _transactionManager; - private ITransaction _transaction; - private ISessionStore _sessionStore; - private ISessionFactoryResolver _factoryResolver; - private ISessionFactory _sessionFactory; - private ISessionManager _sessionManager; - private ISession _session; - private IStatelessSession _statelessSession; - private IDictionary _contextDictionary; + private IKernel _kernel = null!; + private ITransactionManager _transactionManager = null!; + private ITransaction _transaction = null!; + private ISessionStore _sessionStore = null!; + private ISessionFactoryResolver _factoryResolver = null!; + private ISessionFactory _sessionFactory = null!; + private ISessionManager _sessionManager = null!; + private ISession _session = null!; + private IStatelessSession _statelessSession = null!; + private IDictionary _contextDictionary = null!; protected override void OnSetUp() { @@ -65,7 +64,7 @@ protected override void OnSetUp() _sessionFactory = new Mock().Object; _session = new Mock().Object; _statelessSession = new Mock().Object; - _contextDictionary = new Hashtable(); + _contextDictionary = new Dictionary(); _sessionManager = new DefaultSessionManager(_kernel, _sessionStore, _factoryResolver); } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities112/Fixture.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities112/Fixture.cs index a50688e81..f9331cd7f 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities112/Fixture.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities112/Fixture.cs @@ -46,15 +46,17 @@ public virtual void SessionFactoryIsLazilyInitialized() { var handler = Container.Kernel.GetHandler("sessionFactory1"); + const BindingFlags BindingFlags = BindingFlags.NonPublic | + BindingFlags.Instance | + BindingFlags.GetField; + var lifestyleManagerField = - typeof(DefaultHandler).GetField("lifestyleManager", - BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField); + typeof(DefaultHandler).GetField("lifestyleManager", BindingFlags)!; var lifeStyleManager = lifestyleManagerField.GetValue(handler) as SingletonLifestyleManager; Assert.That(lifeStyleManager, Is.Not.Null); var instanceField = - typeof(SingletonLifestyleManager).GetField("instance", - BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField); + typeof(SingletonLifestyleManager).GetField("instance", BindingFlags)!; var instance = instanceField.GetValue(lifeStyleManager); Assert.That(instance, Is.Null); diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities116/Fixture.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities116/Fixture.cs index ba8ca79d8..f34e890a3 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities116/Fixture.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/Facilities116/Fixture.cs @@ -45,8 +45,8 @@ public class Fixture : IssueTestCase private readonly Func> _objectPersister = ObjectPersisterFactory.Create; - private IConfiguration _facilityConfiguration; - private IConfigurationBuilder _configurationBuilder; + private IConfiguration _facilityConfiguration = null!; + private IConfigurationBuilder _configurationBuilder = null!; protected override string ConfigurationFile => "EmptyConfiguration.xml"; diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/IssueTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/IssueTestCase.cs index 90d8efe3e..1f13a393d 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/IssueTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Issues/IssueTestCase.cs @@ -22,7 +22,7 @@ protected virtual string BugNumber { get { - var ns = GetType().Namespace; + var ns = GetType().Namespace!; return ns[(ns.LastIndexOf('.') + 1)..]; } } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Program.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Program.cs index c38d97609..33b51507a 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Program.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Program.cs @@ -14,8 +14,6 @@ // limitations under the License. #endregion -using System; - using NUnit.Common; using NUnitLite; diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Registration/FacilityFluentConfigTestCase.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Registration/FacilityFluentConfigTestCase.cs index 2cc306b96..3e2f6a8bf 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Registration/FacilityFluentConfigTestCase.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Registration/FacilityFluentConfigTestCase.cs @@ -138,27 +138,27 @@ public Configuration GetConfiguration(IConfiguration facilityConfiguration) internal class DummySessionStore : ISessionStore { - public SessionDelegate FindCompatibleSession(string alias) + public bool IsCurrentActivityEmptyFor(string? alias) { throw new System.NotImplementedException(); } - public StatelessSessionDelegate FindCompatibleStatelessSession(string alias) + public SessionDelegate? FindCompatibleSession(string? alias) { throw new System.NotImplementedException(); } - public bool IsCurrentActivityEmptyFor(string alias) + public void Store(string alias, SessionDelegate session) { throw new System.NotImplementedException(); } - public void Store(string alias, SessionDelegate session) + public void Remove(SessionDelegate session) { throw new System.NotImplementedException(); } - public void Remove(SessionDelegate session) + public StatelessSessionDelegate? FindCompatibleStatelessSession(string? alias) { throw new System.NotImplementedException(); } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/SessionCreation/MyDao.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/SessionCreation/MyDao.cs index 64771375d..fd03f91fd 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/SessionCreation/MyDao.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/SessionCreation/MyDao.cs @@ -34,6 +34,7 @@ public MyDao(ISessionManager sessionManager, MySecondDao otherDao) public void PerformComplexOperation1() { using var session = _sessionManager.OpenSession(); + Assert.That(session, Is.Not.Null); _otherDao.PerformSimpleOperation(session); @@ -41,7 +42,7 @@ public void PerformComplexOperation1() public void PerformComplexOperation2() { - ISession previousSession = null; + ISession? previousSession = null; using (var session = _sessionManager.OpenSession()) { @@ -54,10 +55,12 @@ public void PerformComplexOperation2() public void DoOpenCloseAndDisposeOperation() { using var session = _sessionManager.OpenSession(); + Assert.That(session.IsConnected, Is.True); Assert.That(session.IsOpen, Is.True); session.Close(); + Assert.That(session.IsConnected, Is.False); Assert.That(session.IsOpen, Is.False); } @@ -65,6 +68,7 @@ public void DoOpenCloseAndDisposeOperation() public void PerformComplexStatelessOperation1() { using var session = _sessionManager.OpenStatelessSession(); + Assert.That(session, Is.Not.Null); _otherDao.PerformSimpleStatelessOperation(session); @@ -72,7 +76,7 @@ public void PerformComplexStatelessOperation1() public void PerformComplexStatelessOperation2() { - IStatelessSession previousSession = null; + IStatelessSession? previousSession = null; using (var session = _sessionManager.OpenStatelessSession()) { @@ -85,10 +89,12 @@ public void PerformComplexStatelessOperation2() public void DoStatelessOpenCloseAndDisposeOperation() { using var session = _sessionManager.OpenStatelessSession(); + Assert.That(session.IsConnected, Is.True); Assert.That(session.IsOpen, Is.True); session.Close(); + Assert.That(session.IsConnected, Is.False); Assert.That(session.IsOpen, Is.False); } diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService.cs index c6feb25c5..9cedd3ead 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService.cs @@ -30,14 +30,14 @@ public class RootService : NHibernateGenericDao private readonly FirstDao _firstDao; private readonly SecondDao _secondDao; - public RootService(FirstDao firstDao, SecondDao secondDao, ISessionManager sessionManager) : + public RootService(ISessionManager sessionManager, FirstDao firstDao, SecondDao secondDao) : base(sessionManager) { _firstDao = firstDao; _secondDao = secondDao; } - public OrderDao OrderDao { get; set; } + public OrderDao OrderDao { get; set; } = null!; [Transaction] public virtual Blog CreateBlogUsingDetachedCriteria(string name) diff --git a/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService2.cs b/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService2.cs index c000a4308..ada659f7a 100644 --- a/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService2.cs +++ b/src/Castle.Facilities.NHibernateIntegration.Tests/Transactions/Model/RootService2.cs @@ -28,14 +28,14 @@ public class RootService2 : NHibernateGenericDao private readonly FirstDao2 _firstDao; private readonly SecondDao2 _secondDao; - public RootService2(FirstDao2 firstDao, SecondDao2 secondDao, ISessionManager sessionManager) : + public RootService2(ISessionManager sessionManager, FirstDao2 firstDao, SecondDao2 secondDao) : base(sessionManager) { _firstDao = firstDao; _secondDao = secondDao; } - public OrderDao2 OrderDao { get; set; } + public OrderDao2 OrderDao { get; set; } = null!; [Transaction(IsDistributed = true)] public virtual void TwoDbOperationCreate(bool throwException) diff --git a/src/Castle.Facilities.NHibernateIntegration/Builders/DefaultConfigurationBuilder.cs b/src/Castle.Facilities.NHibernateIntegration/Builders/DefaultConfigurationBuilder.cs index 65c03da08..575bbc80c 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Builders/DefaultConfigurationBuilder.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Builders/DefaultConfigurationBuilder.cs @@ -21,7 +21,7 @@ namespace Castle.Facilities.NHibernateIntegration.Builders using System.IO; using System.Reflection; - using Core.Configuration; + using Castle.Core.Configuration; using NHibernate.Event; @@ -82,7 +82,7 @@ protected static void RegisterResources(Configuration configuration, IConfigurat foreach (var item in facilityConfiguration.Children) { - var name = item.Attributes["name"]; + var name = item.Attributes["name"]!; var assemblyName = item.Attributes["assembly"]; if (assemblyName != null) { @@ -109,15 +109,15 @@ protected static void RegisterListeners(Configuration configuration, IConfigurat foreach (var item in facilityConfiguration.Children) { - var eventName = item.Attributes["event"]; - var typeName = item.Attributes["type"]; + var eventName = item.Attributes["event"]!; + var typeName = item.Attributes["type"]!; if (!Enum.IsDefined(typeof(ListenerType), eventName)) { throw new ConfigurationErrorsException("An invalid listener type was specified."); } - var classType = Type.GetType(typeName); + var classType = Type.GetType(typeName)!; //if (classType == null) // throw new ConfigurationErrorsException("The full type name of the listener class must be specified."); @@ -170,16 +170,19 @@ protected static void GenerateMappingFromAttributesIfNeeded(Configuration config // If assembly "NHibernate.Mapping.Attributes" is referenced in targetAssembly. if (Array.Exists(referencedAssemblies, - (AssemblyName x) => string.Equals(x.Name, NHibernateMappingAttributesAssemblyName, StringComparison.Ordinal))) + (AssemblyName assemblyName) => + string.Equals(assemblyName.Name, + NHibernateMappingAttributesAssemblyName, + StringComparison.Ordinal))) { // Obtains, by reflection, the necessary tools to generate NHibernate mapping from attributes. var hbmSerializerType = Type.GetType(string.Concat(NHibernateMappingAttributesAssemblyName, ".HbmSerializer, ", - NHibernateMappingAttributesAssemblyName)); + NHibernateMappingAttributesAssemblyName))!; var hbmSerializer = Activator.CreateInstance(hbmSerializerType); - var validateProperty = hbmSerializerType.GetProperty("Validate"); - var serializeMethod = hbmSerializerType.GetMethod("Serialize", new[] { typeof(Assembly) }); + var validateProperty = hbmSerializerType.GetProperty("Validate")!; + var serializeMethod = hbmSerializerType.GetMethod("Serialize", [typeof(Assembly)])!; // Enable validation of mapping documents generated from the mapping attributes. validateProperty.SetValue(hbmSerializer, true, null); @@ -187,8 +190,9 @@ protected static void GenerateMappingFromAttributesIfNeeded(Configuration config // Generates a stream of mapping documents from all decorated classes in targetAssembly // and add it to NHibernate configuration. configuration.AddInputStream( - (MemoryStream) serializeMethod.Invoke(hbmSerializer, - new object[] { Assembly.Load(targetAssemblyName) })); + (MemoryStream) serializeMethod.Invoke( + hbmSerializer, + new object[] { Assembly.Load(targetAssemblyName) })!); } } @@ -200,7 +204,7 @@ private static Assembly LoadAssembly(string assemblyName) } catch (Exception ex) { - var message = string.Format("The assembly '{0}' could not be loaded.", assemblyName); + var message = $"The assembly '{assemblyName}' could not be loaded."; throw new ConfigurationErrorsException(message, ex); } diff --git a/src/Castle.Facilities.NHibernateIntegration/Builders/PersistentConfigurationBuilder.cs b/src/Castle.Facilities.NHibernateIntegration/Builders/PersistentConfigurationBuilder.cs index b8ad3d00a..74ead1ebf 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Builders/PersistentConfigurationBuilder.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Builders/PersistentConfigurationBuilder.cs @@ -19,14 +19,12 @@ namespace Castle.Facilities.NHibernateIntegration.Builders using System.Collections.Generic; using System.Text.RegularExpressions; + using Castle.Core.Configuration; using Castle.Core.Logging; - - using Core.Configuration; + using Castle.Facilities.NHibernateIntegration.Persisters; using NHibernate.Cfg; - using Persisters; - /// /// Serializes the for subsequent initializations. /// @@ -103,7 +101,7 @@ private static string StripInvalidCharacters(string input) return Regex.Replace(input, "[:*?\"<>\\\\/]", "", RegexOptions.IgnoreCase); } - private static IList GetDependentFilePathsFrom(IConfiguration facilityConfiguration) + private static List GetDependentFilePathsFrom(IConfiguration facilityConfiguration) { var list = new List(); diff --git a/src/Castle.Facilities.NHibernateIntegration/Builders/XmlConfigurationBuilder.cs b/src/Castle.Facilities.NHibernateIntegration/Builders/XmlConfigurationBuilder.cs index c2557f083..b212f1f03 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Builders/XmlConfigurationBuilder.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Builders/XmlConfigurationBuilder.cs @@ -18,9 +18,9 @@ namespace Castle.Facilities.NHibernateIntegration.Builders { using System.Xml; - using Core.Configuration; + using Castle.Core.Configuration; - using Internal; + using Castle.Facilities.NHibernateIntegration.Internal; using NHibernate.Cfg; @@ -38,7 +38,9 @@ public Configuration GetConfiguration(IConfiguration facilityConfiguration) { Configuration configuration; - var configurationFile = facilityConfiguration.Attributes["nhibernateConfigFile"]; + var configurationFile = facilityConfiguration.Attributes["nhibernateConfigFile"] ?? + throw new ArgumentNullException(nameof(facilityConfiguration)); + using (var configurationResource = new FileAssemblyResource(configurationFile)) { using var reader = XmlReader.Create(configurationResource.GetStreamReader()); diff --git a/src/Castle.Facilities.NHibernateIntegration/Castle.Facilities.NHibernateIntegration.csproj b/src/Castle.Facilities.NHibernateIntegration/Castle.Facilities.NHibernateIntegration.csproj index 26c74d299..ddd36fe9b 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Castle.Facilities.NHibernateIntegration.csproj +++ b/src/Castle.Facilities.NHibernateIntegration/Castle.Facilities.NHibernateIntegration.csproj @@ -17,12 +17,20 @@ - - - - - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/DataException.cs b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/DataException.cs index a47028786..d844ff279 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/DataException.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/DataException.cs @@ -17,7 +17,9 @@ namespace Castle.Facilities.NHibernateIntegration.Components.Dao { using System; +#if NETFRAMEWORK using System.Runtime.Serialization; +#endif /// /// Summary description for DataException. diff --git a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/IGenericDao.cs b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/IGenericDao.cs index fb559dc04..577ab8e4e 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/IGenericDao.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/IGenericDao.cs @@ -31,7 +31,7 @@ public interface IGenericDao /// /// The target type. /// The of results - Array FindAll(Type type); + Array? FindAll(Type type); /// /// Returns a portion of the query results (sliced). @@ -40,7 +40,7 @@ public interface IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results - Array FindAll(Type type, int firstRow, int maxRows); + Array? FindAll(Type type, int firstRow, int maxRows); /// /// Finds an object instance by an unique ID. @@ -48,7 +48,7 @@ public interface IGenericDao /// The AR subclass type /// ID value /// The object instance. - object FindById(Type type, object id); + object? FindById(Type type, object id); /// /// Creates (Saves) a new instance to the database. @@ -92,7 +92,7 @@ public interface IGenericDao /// /// The target type. /// The of results. - Array FindAllStateless(Type type); + Array? FindAllStateless(Type type); /// /// Returns a portion of the query results (sliced) using IStatelessSession. @@ -101,7 +101,7 @@ public interface IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - Array FindAllStateless(Type type, int firstRow, int maxRows); + Array? FindAllStateless(Type type, int firstRow, int maxRows); /// /// Finds an object instance by an unique ID using IStatelessSession. @@ -109,14 +109,14 @@ public interface IGenericDao /// The AR subclass type. /// ID value. /// The object instance. - object FindByIdStateless(Type type, object id); + object? FindByIdStateless(Type type, object id); /// /// Creates (saves or inserts) a new instance to the database using IStatelessSession. /// /// The instance to be created on the database. /// The instance. - object CreateStateless(object instance); + object? CreateStateless(object instance); /// /// Persists the modification on the instance state to the database using IStatelessSession. diff --git a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/INHibernateGenericDao.cs b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/INHibernateGenericDao.cs index b4cfba779..910d1b5cc 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/INHibernateGenericDao.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/INHibernateGenericDao.cs @@ -20,6 +20,8 @@ namespace Castle.Facilities.NHibernateIntegration.Components.Dao using NHibernate.Criterion; + using Array = Array; + /// /// Summary description for INHibernateGenericDao. /// @@ -28,13 +30,26 @@ namespace Castle.Facilities.NHibernateIntegration.Components.Dao /// public interface INHibernateGenericDao : IGenericDao { + /// + /// Initializes the lazy properties. + /// + /// The instance. + void InitializeLazyProperties(object? instance); + + /// + /// Initializes the lazy property. + /// + /// The instance. + /// Name of the property. + void InitializeLazyProperty(object? instance, string? propertyName); + /// /// Returns all instances found for the specified type using criteria. /// /// The target type. /// The criteria expression /// The of results. - Array FindAll(Type type, ICriterion[] criterias); + Array? FindAll(Type type, ICriterion[]? criterias); /// /// Returns all instances found for the specified type using criteria. @@ -44,7 +59,7 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - Array FindAll(Type type, ICriterion[] criterias, int firstRow, int maxRows); + Array? FindAll(Type type, ICriterion[]? criterias, int firstRow, int maxRows); /// /// Returns all instances found for the specified type using criteria. @@ -53,7 +68,7 @@ public interface INHibernateGenericDao : IGenericDao /// The criteria expression /// An of objects. /// The of results. - Array FindAll(Type type, ICriterion[] criterias, Order[] sortItems); + Array? FindAll(Type type, ICriterion[]? criterias, Order[]? sortItems); /// /// Returns all instances found for the specified type using criteria. @@ -64,14 +79,14 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - Array FindAll(Type type, ICriterion[] criterias, Order[] sortItems, int firstRow, int maxRows); + Array? FindAll(Type type, ICriterion[]? criterias, Order[]? sortItems, int firstRow, int maxRows); /// /// Finds all with custom query. /// /// The query string. /// - Array FindAllWithCustomQuery(string queryString); + Array? FindAllWithCustomQuery(string? queryString); /// /// Finds all with custom HQL query. @@ -80,14 +95,14 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - Array FindAllWithCustomQuery(string queryString, int firstRow, int maxRows); + Array? FindAllWithCustomQuery(string? queryString, int firstRow, int maxRows); /// /// Finds all with named HQL query. /// /// The named query. /// - Array FindAllWithNamedQuery(string namedQuery); + Array? FindAllWithNamedQuery(string? namedQuery); /// /// Finds all with named HQL query. @@ -96,20 +111,7 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - Array FindAllWithNamedQuery(string namedQuery, int firstRow, int maxRows); - - /// - /// Initializes the lazy properties. - /// - /// The instance. - void InitializeLazyProperties(object instance); - - /// - /// Initializes the lazy property. - /// - /// The instance. - /// Name of the property. - void InitializeLazyProperty(object instance, string propertyName); + Array? FindAllWithNamedQuery(string? namedQuery, int firstRow, int maxRows); /// /// Returns all instances found for the specified type @@ -118,7 +120,7 @@ public interface INHibernateGenericDao : IGenericDao /// The target type. /// The criteria expression. /// The of results. - Array FindAllStateless(Type type, ICriterion[] criterias); + Array? FindAllStateless(Type type, ICriterion[]? criterias); /// /// Returns all instances found for the specified type @@ -129,7 +131,7 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - Array FindAllStateless(Type type, ICriterion[] criterias, int firstRow, int maxRows); + Array? FindAllStateless(Type type, ICriterion[]? criterias, int firstRow, int maxRows); /// /// Returns all instances found for the specified type @@ -139,7 +141,7 @@ public interface INHibernateGenericDao : IGenericDao /// The criteria expression. /// An of objects. /// The of results. - Array FindAllStateless(Type type, ICriterion[] criterias, Order[] sortItems); + Array? FindAllStateless(Type type, ICriterion[]? criterias, Order[]? sortItems); /// /// Returns all instances found for the specified type @@ -151,14 +153,14 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - Array FindAllStateless(Type type, ICriterion[] criterias, Order[] sortItems, int firstRow, int maxRows); + Array? FindAllStateless(Type type, ICriterion[]? criterias, Order[]? sortItems, int firstRow, int maxRows); /// /// Finds all with custom query using IStatelessSession. /// /// The query string. /// - Array FindAllWithCustomQueryStateless(string queryString); + Array? FindAllWithCustomQueryStateless(string? queryString); /// /// Finds all with custom HQL query using IStatelessSession. @@ -167,14 +169,14 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - Array FindAllWithCustomQueryStateless(string queryString, int firstRow, int maxRows); + Array? FindAllWithCustomQueryStateless(string? queryString, int firstRow, int maxRows); /// /// Finds all with named HQL query using IStatelessSession. /// /// The named query. /// - Array FindAllWithNamedQueryStateless(string namedQuery); + Array? FindAllWithNamedQueryStateless(string? namedQuery); /// /// Finds all with named HQL query using IStatelessSession. @@ -183,6 +185,6 @@ public interface INHibernateGenericDao : IGenericDao /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - Array FindAllWithNamedQueryStateless(string namedQuery, int firstRow, int maxRows); + Array? FindAllWithNamedQueryStateless(string? namedQuery, int firstRow, int maxRows); } } diff --git a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/NHibernateGenericDao.cs b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/NHibernateGenericDao.cs index 16d2b764a..dfd5ccbb8 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Components/Dao/NHibernateGenericDao.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Components/Dao/NHibernateGenericDao.cs @@ -18,13 +18,13 @@ namespace Castle.Facilities.NHibernateIntegration.Components.Dao { using System; + using Castle.Facilities.NHibernateIntegration.Util; + using NHibernate; using NHibernate.Collection; using NHibernate.Criterion; using NHibernate.Proxy; - using Util; - /// /// Summary description for GenericDao. /// @@ -47,7 +47,7 @@ public NHibernateGenericDao(ISessionManager sessionManager) /// /// The session manager. /// The session factory alias. - public NHibernateGenericDao(ISessionManager sessionManager, string sessionFactoryAlias) : + public NHibernateGenericDao(ISessionManager sessionManager, string? sessionFactoryAlias) : this(sessionManager) { SessionFactoryAlias = sessionFactoryAlias; @@ -63,16 +63,80 @@ public NHibernateGenericDao(ISessionManager sessionManager, string sessionFactor /// Gets or sets the session factory alias. /// /// The session factory alias. - public string SessionFactoryAlias { get; set; } = null; + public string? SessionFactoryAlias { get; set; } = null; #region IGenericDAO Members + /// + /// Initializes the lazy properties. + /// + /// The instance. + public void InitializeLazyProperties(object? instance) + { + if (instance == null) + { + throw new ArgumentNullException(nameof(instance)); + } + + using var session = GetSession(); + + foreach (var value in ReflectionUtility.GetPropertiesDictionary(instance).Values) + { + if (value is INHibernateProxy or IPersistentCollection) + { + if (!NHibernateUtil.IsInitialized(value)) + { + session.Lock(instance, LockMode.None); + NHibernateUtil.Initialize(value); + } + } + } + } + + /// + /// Initializes the lazy property. + /// + /// The instance. + /// The name of the property. + public void InitializeLazyProperty(object? instance, string? propertyName) + { + if (instance == null) + { + throw new ArgumentNullException(nameof(instance)); + } + + if (string.IsNullOrEmpty(propertyName)) + { + throw new ArgumentNullException(nameof(propertyName)); + } + + var properties = ReflectionUtility.GetPropertiesDictionary(instance); + if (!properties.ContainsKey(propertyName!)) + { + throw new ArgumentOutOfRangeException(nameof(propertyName), + $"Property {propertyName} doest not exist for type {instance.GetType()}."); + } + + using var session = GetSession(); + + var value = properties[propertyName!]; + + if (value is INHibernateProxy or IPersistentCollection) + { + if (!NHibernateUtil.IsInitialized(value)) + { + session.Lock(instance, LockMode.None); + NHibernateUtil.Initialize(value); + } + } + } + /// /// Returns all instances found for the specified type. /// /// The target type. /// The of results - public virtual Array FindAll(Type type) + public virtual Array? FindAll(Type type) { return FindAll(type, int.MinValue, int.MinValue); } @@ -84,9 +148,10 @@ public virtual Array FindAll(Type type) /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - public virtual Array FindAll(Type type, int firstRow, int maxRows) + public virtual Array? FindAll(Type type, int firstRow, int maxRows) { using var session = GetSession(); + try { var criteria = session.CreateCriteria(type); @@ -123,6 +188,7 @@ public virtual Array FindAll(Type type, int firstRow, int maxRows) public virtual object FindById(Type type, object id) { using var session = GetSession(); + try { return session.Load(type, id); @@ -145,6 +211,7 @@ public virtual object FindById(Type type, object id) public virtual object Create(object instance) { using var session = GetSession(); + try { return session.Save(instance); @@ -162,6 +229,7 @@ public virtual object Create(object instance) public virtual void Update(object instance) { using var session = GetSession(); + try { session.Update(instance); @@ -179,6 +247,7 @@ public virtual void Update(object instance) public virtual void Delete(object instance) { using var session = GetSession(); + try { session.Delete(instance); @@ -196,9 +265,10 @@ public virtual void Delete(object instance) public virtual void DeleteAll(Type type) { using var session = GetSession(); + try { - session.Delete(string.Format("from {0}", type.Name)); + session.Delete($"from {type.Name}"); } catch (Exception ex) { @@ -219,6 +289,7 @@ public virtual void DeleteAll(Type type) public virtual void Save(object instance) { using var session = GetSession(); + try { session.SaveOrUpdate(instance); @@ -249,6 +320,7 @@ public virtual Array FindAllStateless(Type type) public virtual Array FindAllStateless(Type type, int firstRow, int maxRows) { using var session = GetStatelessSession(); + try { var criteria = session.CreateCriteria(type); @@ -285,6 +357,7 @@ public virtual Array FindAllStateless(Type type, int firstRow, int maxRows) public object FindByIdStateless(Type type, object id) { using var session = GetStatelessSession(); + try { return session.Get(type.FullName, id); @@ -307,6 +380,7 @@ public object FindByIdStateless(Type type, object id) public object CreateStateless(object instance) { using var session = GetStatelessSession(); + try { return session.Insert(instance); @@ -324,6 +398,7 @@ public object CreateStateless(object instance) public void UpdateStateless(object instance) { using var session = GetStatelessSession(); + try { session.Update(instance); @@ -341,6 +416,7 @@ public void UpdateStateless(object instance) public void DeleteStateless(object instance) { using var session = GetStatelessSession(); + try { session.Delete(instance); @@ -358,6 +434,7 @@ public void DeleteStateless(object instance) public void DeleteAllStateless(Type type) { using var session = GetStatelessSession(); + try { session.Delete($"from {type.Name}"); @@ -378,7 +455,7 @@ public void DeleteAllStateless(Type type) /// The target type. /// The criteria expression. /// The of results. - public virtual Array FindAll(Type type, ICriterion[] criterias) + public virtual Array? FindAll(Type type, ICriterion[]? criterias) { return FindAll(type, criterias, null, int.MinValue, int.MinValue); } @@ -391,7 +468,7 @@ public virtual Array FindAll(Type type, ICriterion[] criterias) /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - public virtual Array FindAll(Type type, ICriterion[] criterias, int firstRow, int maxRows) + public virtual Array? FindAll(Type type, ICriterion[]? criterias, int firstRow, int maxRows) { return FindAll(type, criterias, null, firstRow, maxRows); } @@ -403,7 +480,7 @@ public virtual Array FindAll(Type type, ICriterion[] criterias, int firstRow, in /// The criteria expression. /// An of objects. /// The of results. - public virtual Array FindAll(Type type, ICriterion[] criterias, Order[] sortItems) + public virtual Array? FindAll(Type type, ICriterion[]? criterias, Order[]? sortItems) { return FindAll(type, criterias, sortItems, int.MinValue, int.MinValue); } @@ -417,9 +494,10 @@ public virtual Array FindAll(Type type, ICriterion[] criterias, Order[] sortItem /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - public virtual Array FindAll(Type type, ICriterion[] criterias, Order[] sortItems, int firstRow, int maxRows) + public virtual Array? FindAll(Type type, ICriterion[]? criterias, Order[]? sortItems, int firstRow, int maxRows) { using var session = GetSession(); + try { var criteria = session.CreateCriteria(type); @@ -468,7 +546,7 @@ public virtual Array FindAll(Type type, ICriterion[] criterias, Order[] sortItem /// /// The query string. /// - public virtual Array FindAllWithCustomQuery(string queryString) + public virtual Array? FindAllWithCustomQuery(string? queryString) { return FindAllWithCustomQuery(queryString, int.MinValue, int.MinValue); } @@ -480,7 +558,7 @@ public virtual Array FindAllWithCustomQuery(string queryString) /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - public virtual Array FindAllWithCustomQuery(string queryString, int firstRow, int maxRows) + public virtual Array? FindAllWithCustomQuery(string? queryString, int firstRow, int maxRows) { if (string.IsNullOrEmpty(queryString)) { @@ -488,6 +566,7 @@ public virtual Array FindAllWithCustomQuery(string queryString, int firstRow, in } using var session = GetSession(); + try { var query = session.CreateQuery(queryString); @@ -508,7 +587,7 @@ public virtual Array FindAllWithCustomQuery(string queryString, int firstRow, in return null; } - var array = Array.CreateInstance(result[0].GetType(), result.Count); + var array = Array.CreateInstance(result[0]!.GetType(), result.Count); result.CopyTo(array, 0); return array; @@ -524,7 +603,7 @@ public virtual Array FindAllWithCustomQuery(string queryString, int firstRow, in /// /// The named query. /// - public virtual Array FindAllWithNamedQuery(string namedQuery) + public virtual Array? FindAllWithNamedQuery(string? namedQuery) { return FindAllWithNamedQuery(namedQuery, int.MinValue, int.MinValue); } @@ -536,7 +615,7 @@ public virtual Array FindAllWithNamedQuery(string namedQuery) /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - public virtual Array FindAllWithNamedQuery(string namedQuery, int firstRow, int maxRows) + public virtual Array? FindAllWithNamedQuery(string? namedQuery, int firstRow, int maxRows) { if (string.IsNullOrEmpty(namedQuery)) { @@ -544,6 +623,7 @@ public virtual Array FindAllWithNamedQuery(string namedQuery, int firstRow, int } using var session = GetSession(); + try { var query = session.GetNamedQuery(namedQuery); @@ -568,7 +648,7 @@ public virtual Array FindAllWithNamedQuery(string namedQuery, int firstRow, int return null; } - var array = Array.CreateInstance(result[0].GetType(), result.Count); + var array = Array.CreateInstance(result[0]!.GetType(), result.Count); result.CopyTo(array, 0); return array; @@ -579,68 +659,6 @@ public virtual Array FindAllWithNamedQuery(string namedQuery, int firstRow, int } } - /// - /// Initializes the lazy properties. - /// - /// The instance. - public void InitializeLazyProperties(object instance) - { - if (instance == null) - { - throw new ArgumentNullException(nameof(instance)); - } - - using var session = GetSession(); - foreach (var value in ReflectionUtility.GetPropertiesDictionary(instance).Values) - { - if (value is INHibernateProxy or IPersistentCollection) - { - if (!NHibernateUtil.IsInitialized(value)) - { - session.Lock(instance, LockMode.None); - NHibernateUtil.Initialize(value); - } - } - } - } - - /// - /// Initializes the lazy property. - /// - /// The instance. - /// The name of the property. - public void InitializeLazyProperty(object instance, string propertyName) - { - if (instance == null) - { - throw new ArgumentNullException(nameof(instance)); - } - - if (string.IsNullOrEmpty(propertyName)) - { - throw new ArgumentNullException(nameof(propertyName)); - } - - var properties = ReflectionUtility.GetPropertiesDictionary(instance); - if (!properties.ContainsKey(propertyName)) - { - throw new ArgumentOutOfRangeException(nameof(propertyName), - $"Property {propertyName} doest not exist for type {instance.GetType()}."); - } - - using var session = GetSession(); - var value = properties[propertyName]; - - if (value is INHibernateProxy or IPersistentCollection) - { - if (!NHibernateUtil.IsInitialized(value)) - { - session.Lock(instance, LockMode.None); - NHibernateUtil.Initialize(value); - } - } - } - /// /// Returns all instances found for the specified type /// using criteria and IStatelessSession. @@ -648,7 +666,7 @@ public void InitializeLazyProperty(object instance, string propertyName) /// The target type. /// The criteria expression. /// The of results. - public virtual Array FindAllStateless(Type type, ICriterion[] criterias) + public virtual Array? FindAllStateless(Type type, ICriterion[]? criterias) { return FindAllStateless(type, criterias, null, int.MinValue, int.MinValue); } @@ -662,7 +680,7 @@ public virtual Array FindAllStateless(Type type, ICriterion[] criterias) /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - public virtual Array FindAllStateless(Type type, ICriterion[] criterias, int firstRow, int maxRows) + public virtual Array? FindAllStateless(Type type, ICriterion[]? criterias, int firstRow, int maxRows) { return FindAllStateless(type, criterias, null, firstRow, maxRows); } @@ -675,7 +693,7 @@ public virtual Array FindAllStateless(Type type, ICriterion[] criterias, int fir /// The criteria expression. /// An of objects. /// The of results. - public virtual Array FindAllStateless(Type type, ICriterion[] criterias, Order[] sortItems) + public virtual Array FindAllStateless(Type type, ICriterion[]? criterias, Order[]? sortItems) { return FindAllStateless(type, criterias, sortItems, int.MinValue, int.MinValue); } @@ -690,9 +708,10 @@ public virtual Array FindAllStateless(Type type, ICriterion[] criterias, Order[] /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// The of results. - public virtual Array FindAllStateless(Type type, ICriterion[] criterias, Order[] sortItems, int firstRow, int maxRows) + public virtual Array FindAllStateless(Type type, ICriterion[]? criterias, Order[]? sortItems, int firstRow, int maxRows) { using var session = GetStatelessSession(); + try { var criteria = session.CreateCriteria(type); @@ -741,7 +760,7 @@ public virtual Array FindAllStateless(Type type, ICriterion[] criterias, Order[] /// /// The query string. /// - public virtual Array FindAllWithCustomQueryStateless(string queryString) + public virtual Array? FindAllWithCustomQueryStateless(string? queryString) { return FindAllWithCustomQueryStateless(queryString, int.MinValue, int.MinValue); } @@ -753,7 +772,7 @@ public virtual Array FindAllWithCustomQueryStateless(string queryString) /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - public virtual Array FindAllWithCustomQueryStateless(string queryString, int firstRow, int maxRows) + public virtual Array? FindAllWithCustomQueryStateless(string? queryString, int firstRow, int maxRows) { if (string.IsNullOrEmpty(queryString)) { @@ -761,6 +780,7 @@ public virtual Array FindAllWithCustomQueryStateless(string queryString, int fir } using var session = GetStatelessSession(); + try { var query = session.CreateQuery(queryString); @@ -781,7 +801,7 @@ public virtual Array FindAllWithCustomQueryStateless(string queryString, int fir return null; } - var array = Array.CreateInstance(result[0].GetType(), result.Count); + var array = Array.CreateInstance(result[0]!.GetType(), result.Count); result.CopyTo(array, 0); return array; @@ -797,7 +817,7 @@ public virtual Array FindAllWithCustomQueryStateless(string queryString, int fir /// /// The named query. /// - public virtual Array FindAllWithNamedQueryStateless(string namedQuery) + public virtual Array? FindAllWithNamedQueryStateless(string? namedQuery) { return FindAllWithNamedQueryStateless(namedQuery, int.MinValue, int.MinValue); } @@ -809,7 +829,7 @@ public virtual Array FindAllWithNamedQueryStateless(string namedQuery) /// The number of the first row to retrieve. /// The maximum number of results retrieved. /// - public virtual Array FindAllWithNamedQueryStateless(string namedQuery, int firstRow, int maxRows) + public virtual Array? FindAllWithNamedQueryStateless(string? namedQuery, int firstRow, int maxRows) { if (string.IsNullOrEmpty(namedQuery)) { @@ -817,6 +837,7 @@ public virtual Array FindAllWithNamedQueryStateless(string namedQuery, int first } using var session = GetStatelessSession(); + try { var query = session.GetNamedQuery(namedQuery); @@ -841,7 +862,7 @@ public virtual Array FindAllWithNamedQueryStateless(string namedQuery, int first return null; } - var array = Array.CreateInstance(result[0].GetType(), result.Count); + var array = Array.CreateInstance(result[0]!.GetType(), result.Count); result.CopyTo(array, 0); return array; diff --git a/src/Castle.Facilities.NHibernateIntegration/DefaultSessionManager.cs b/src/Castle.Facilities.NHibernateIntegration/DefaultSessionManager.cs index ef982f675..eb1c611be 100644 --- a/src/Castle.Facilities.NHibernateIntegration/DefaultSessionManager.cs +++ b/src/Castle.Facilities.NHibernateIntegration/DefaultSessionManager.cs @@ -21,6 +21,7 @@ namespace Castle.Facilities.NHibernateIntegration using System.Data; using Castle.Facilities.NHibernateIntegration.Internal; + using Castle.Facilities.NHibernateIntegration.Util; using Castle.MicroKernel; using Castle.MicroKernel.Facilities; using Castle.Services.Transaction; @@ -44,6 +45,9 @@ public class DefaultSessionManager : MarshalByRefObject, ISessionManager /// public const string InterceptorKeyFormatString = "nhibernate.session.interceptor.{0}"; + internal const string SessionEnlistedContextKey = "nh.session.enlisted"; + internal const string StatelessSessionEnlistedContextKey = "nh.statelessSession.enlisted"; + private readonly IKernel _kernel; private readonly ISessionStore _sessionStore; private readonly ISessionFactoryResolver _sessionFactoryResolver; @@ -54,10 +58,9 @@ public class DefaultSessionManager : MarshalByRefObject, ISessionManager /// The . /// The . /// The . - public DefaultSessionManager( - IKernel kernel, - ISessionStore sessionStore, - ISessionFactoryResolver sessionFactoryResolver) + public DefaultSessionManager(IKernel kernel, + ISessionStore sessionStore, + ISessionFactoryResolver sessionFactoryResolver) { _kernel = kernel; _sessionStore = sessionStore; @@ -84,7 +87,7 @@ public ISession OpenSession() /// /// /// - public ISession OpenSession(string alias) + public ISession OpenSession(string? alias) { if (alias == null) { @@ -93,23 +96,22 @@ public ISession OpenSession(string alias) var transaction = GetCurrentTransaction(); - var wrapped = _sessionStore.FindCompatibleSession(alias); - - if (wrapped == null) + var wrappedSession = _sessionStore.FindCompatibleSession(alias); + if (wrappedSession == null) { var session = CreateSession(alias); - wrapped = WrapSession(transaction != null, session); - EnlistIfNecessary(true, transaction, wrapped); - _sessionStore.Store(alias, wrapped); + wrappedSession = WrapSession(transaction != null, session); + EnlistIfNecessary(true, transaction, wrappedSession); + _sessionStore.Store(alias, wrappedSession); } else { - EnlistIfNecessary(false, transaction, wrapped); - wrapped = WrapSession(true, wrapped.InnerSession); + EnlistIfNecessary(false, transaction, wrappedSession); + wrappedSession = WrapSession(true, wrappedSession.InnerSession); } - return wrapped; + return wrappedSession; } /// @@ -126,7 +128,7 @@ public IStatelessSession OpenStatelessSession() /// /// /// - public IStatelessSession OpenStatelessSession(string alias) + public IStatelessSession OpenStatelessSession(string? alias) { if (alias == null) { @@ -135,23 +137,22 @@ public IStatelessSession OpenStatelessSession(string alias) var transaction = GetCurrentTransaction(); - var wrapped = _sessionStore.FindCompatibleStatelessSession(alias); - - if (wrapped == null) + var wrappedSession = _sessionStore.FindCompatibleStatelessSession(alias); + if (wrappedSession == null) { var session = CreateStatelessSession(alias); - wrapped = WrapStatelessSession(transaction != null, session); - EnlistIfNecessary(true, transaction, wrapped); - _sessionStore.Store(alias, wrapped); + wrappedSession = WrapStatelessSession(transaction != null, session); + EnlistIfNecessary(true, transaction, wrappedSession); + _sessionStore.Store(alias, wrappedSession); } else { - EnlistIfNecessary(false, transaction, wrapped); - wrapped = WrapStatelessSession(true, wrapped.InnerSession); + EnlistIfNecessary(false, transaction, wrappedSession); + wrappedSession = WrapStatelessSession(true, wrappedSession.InnerSession); } - return wrapped; + return wrappedSession; } /// @@ -161,20 +162,19 @@ public IStatelessSession OpenStatelessSession(string alias) /// The transaction. /// The session. /// - protected static bool EnlistIfNecessary( - bool weAreSessionOwner, - ITransaction transaction, - SessionDelegate session) + protected static bool EnlistIfNecessary(bool weAreSessionOwner, + ITransaction? transaction, + SessionDelegate session) { if (transaction == null) { return false; } - var list = (IList) transaction.Context["nh.session.enlisted"]; - bool shouldEnlist; + transaction.Context.TryGetValueAs(SessionEnlistedContextKey, + out IList? list); if (list == null) { list = new List(); @@ -200,7 +200,7 @@ protected static bool EnlistIfNecessary( { if (session.Transaction == null || !session.Transaction.IsActive) { - transaction.Context["nh.session.enlisted"] = list; + transaction.Context[SessionEnlistedContextKey] = list; var level = TranslateTransactionIsolationLevel(transaction.IsolationLevel); transaction.Enlist(new ResourceAdapter(session.BeginTransaction(level), transaction.IsAmbient)); @@ -224,20 +224,19 @@ protected static bool EnlistIfNecessary( /// The transaction. /// The stateless session. /// - protected static bool EnlistIfNecessary( - bool weAreSessionOwner, - ITransaction transaction, - StatelessSessionDelegate statelessSession) + protected static bool EnlistIfNecessary(bool weAreSessionOwner, + ITransaction? transaction, + StatelessSessionDelegate statelessSession) { if (transaction == null) { return false; } - var list = (IList) transaction.Context["nh.statelessSession.enlisted"]; - bool shouldEnlist; + transaction.Context.TryGetValueAs(StatelessSessionEnlistedContextKey, + out IList? list); if (list == null) { list = new List(); @@ -263,7 +262,7 @@ protected static bool EnlistIfNecessary( { if (statelessSession.Transaction == null || !statelessSession.Transaction.IsActive) { - transaction.Context["nh.statelessSession.enlisted"] = list; + transaction.Context[StatelessSessionEnlistedContextKey] = list; var level = TranslateTransactionIsolationLevel(transaction.IsolationLevel); transaction.Enlist(new ResourceAdapter(statelessSession.BeginTransaction(level), transaction.IsAmbient)); @@ -295,7 +294,7 @@ private static IsolationLevel TranslateTransactionIsolationLevel( }; } - private ITransaction GetCurrentTransaction() + private ITransaction? GetCurrentTransaction() { var transactionManager = _kernel.Resolve(); return transactionManager.CurrentTransaction; @@ -317,8 +316,8 @@ private ISession CreateSession(string alias) if (sessionFactory == null) { - throw new FacilityException($"No {nameof(ISessionFactory)} implementation " + - $"associated with the given {nameof(ISession)} alias: {alias}."); + throw new FacilityException($"No '{nameof(ISessionFactory)}' implementation " + + $"associated with the given '{nameof(ISession)}' alias: '{alias}'."); } ISession session; @@ -357,8 +356,8 @@ private IStatelessSession CreateStatelessSession(string alias) if (sessionFactory == null) { - throw new FacilityException($"No {nameof(ISessionFactory)} implementation " + - $"associated with the given {nameof(IStatelessSession)} alias: {alias}."); + throw new FacilityException($"No '{nameof(ISessionFactory)}' implementation " + + $"associated with the given '{nameof(IStatelessSession)}' alias: '{alias}'."); } var session = sessionFactory.OpenStatelessSession(); diff --git a/src/Castle.Facilities.NHibernateIntegration/ISessionManager.cs b/src/Castle.Facilities.NHibernateIntegration/ISessionManager.cs index def931f58..7e56a3ad2 100644 --- a/src/Castle.Facilities.NHibernateIntegration/ISessionManager.cs +++ b/src/Castle.Facilities.NHibernateIntegration/ISessionManager.cs @@ -41,7 +41,7 @@ public interface ISessionManager /// /// /// - ISession OpenSession(string alias); + ISession OpenSession(string? alias); /// /// Returns a valid opened and connected instance. @@ -54,6 +54,6 @@ public interface ISessionManager /// /// /// - IStatelessSession OpenStatelessSession(string alias); + IStatelessSession OpenStatelessSession(string? alias); } } diff --git a/src/Castle.Facilities.NHibernateIntegration/ISessionStore.cs b/src/Castle.Facilities.NHibernateIntegration/ISessionStore.cs index 3d3421320..f5311211f 100644 --- a/src/Castle.Facilities.NHibernateIntegration/ISessionStore.cs +++ b/src/Castle.Facilities.NHibernateIntegration/ISessionStore.cs @@ -26,7 +26,7 @@ public interface ISessionStore /// Returns true if the current activity /// (which is an execution activity context) has no sessions available. /// - bool IsCurrentActivityEmptyFor(string alias); + bool IsCurrentActivityEmptyFor(string? alias); /// /// Should return a previously stored session for the given alias if available, @@ -34,7 +34,7 @@ public interface ISessionStore /// /// /// - SessionDelegate FindCompatibleSession(string alias); + SessionDelegate? FindCompatibleSession(string? alias); /// /// Should store the specified session instance. @@ -55,7 +55,7 @@ public interface ISessionStore /// /// /// - StatelessSessionDelegate FindCompatibleStatelessSession(string alias); + StatelessSessionDelegate? FindCompatibleStatelessSession(string? alias); /// /// Should store the specified stateless session instance. diff --git a/src/Castle.Facilities.NHibernateIntegration/Internal/NHibernateSessionInterceptor.cs b/src/Castle.Facilities.NHibernateIntegration/Internal/NHibernateSessionInterceptor.cs index 2df9ebce7..16bdcffb3 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Internal/NHibernateSessionInterceptor.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Internal/NHibernateSessionInterceptor.cs @@ -32,7 +32,7 @@ namespace Castle.Facilities.NHibernateIntegration.Internal public class NHibernateSessionInterceptor : IInterceptor, IOnBehalfAware { private readonly ISessionManager _sessionManager; - private IEnumerable _metaInfo; + private IEnumerable? _metaInfo; /// /// Constructor. @@ -58,7 +58,7 @@ public void Intercept(IInvocation invocation) { MethodInfo methodInfo; - if (invocation.Method.DeclaringType.IsInterface) + if (invocation.Method.DeclaringType!.IsInterface) { methodInfo = invocation.MethodInvocationTarget; } diff --git a/src/Castle.Facilities.NHibernateIntegration/Internal/SessionDelegate.cs b/src/Castle.Facilities.NHibernateIntegration/Internal/SessionDelegate.cs index 35d986ab2..64408cbd6 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Internal/SessionDelegate.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Internal/SessionDelegate.cs @@ -35,20 +35,14 @@ namespace Castle.Facilities.NHibernateIntegration /// /// /// - /// - /// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0618 - /// - /// #pragma warning disable 0618, 0612 - /// #pragma warning restore 0618, 0612 - /// - /// [Serializable] public class SessionDelegate : MarshalByRefObject, ISession { - private readonly bool _canClose; private readonly ISessionStore _sessionStore; - private object _cookie; + private readonly bool _canClose; + private bool _disposed; + private object? _cookie; /// /// Initializes a new instance of the class. @@ -56,13 +50,6 @@ public class SessionDelegate : MarshalByRefObject, ISession /// The inner session. /// The session store. /// Set to true if can close the session. - /// - /// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0618 - /// - /// #pragma warning disable 0618, 0612 - /// #pragma warning restore 0618, 0612 - /// - /// public SessionDelegate(ISession innerSession, ISessionStore sessionStore, bool canClose) { InnerSession = innerSession; @@ -80,7 +67,7 @@ public SessionDelegate(ISession innerSession, ISessionStore sessionStore, bool c /// Gets or sets the session store cookie. /// /// The session store cookie. - public object SessionStoreCookie + public object? SessionStoreCookie { get => _cookie; set => _cookie = value; @@ -99,7 +86,7 @@ public void Dispose() /// /// if set to true [closing]. /// - protected IDbConnection DoClose(bool closing) + protected IDbConnection? DoClose(bool closing) { if (_disposed) { @@ -114,9 +101,9 @@ protected IDbConnection DoClose(bool closing) return null; } - internal IDbConnection InternalClose(bool closing) + internal IDbConnection? InternalClose(bool closing) { - IDbConnection connection = null; + IDbConnection? connection = null; _sessionStore.Remove(this); @@ -191,10 +178,10 @@ public bool DefaultReadOnly /// , /// because can return . /// - public ITransaction Transaction => - InnerSession?.GetSessionImplementation()? - .ConnectionManager? - .CurrentTransaction; + public ITransaction? Transaction => + InnerSession.GetSessionImplementation() + .ConnectionManager? + .CurrentTransaction; /// public CacheMode CacheMode @@ -216,9 +203,9 @@ public ISharedSessionBuilder SessionWithOptions() } /// - public DbConnection Close() + public DbConnection? Close() { - return (DbConnection) DoClose(true); + return (DbConnection?) DoClose(true); } /// diff --git a/src/Castle.Facilities.NHibernateIntegration/Internal/SessionFactoryActivator.cs b/src/Castle.Facilities.NHibernateIntegration/Internal/SessionFactoryActivator.cs index b072a7d92..ce2ce9abe 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Internal/SessionFactoryActivator.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Internal/SessionFactoryActivator.cs @@ -68,12 +68,13 @@ public override object Create(CreationContext context, Burden burden) /// protected virtual void RaiseCreatingSessionFactory() { - var configuration = Model.ExtendedProperties[Constants.SessionFactoryConfiguration] as Configuration; - - var contributors = Kernel.ResolveAll(); - foreach (var contributor in contributors) + if (Model.ExtendedProperties[Constants.SessionFactoryConfiguration] is Configuration configuration) { - contributor.Process(Model.Name, configuration); + var contributors = Kernel.ResolveAll(); + foreach (var contributor in contributors) + { + contributor.Process(Model.Name, configuration); + } } } } diff --git a/src/Castle.Facilities.NHibernateIntegration/Internal/StatelessSessionDelegate.cs b/src/Castle.Facilities.NHibernateIntegration/Internal/StatelessSessionDelegate.cs index e30ee1602..8214eb286 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Internal/StatelessSessionDelegate.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Internal/StatelessSessionDelegate.cs @@ -36,9 +36,9 @@ namespace Castle.Facilities.NHibernateIntegration [Serializable] public class StatelessSessionDelegate : MarshalByRefObject, IStatelessSession { - private readonly bool _canClose; private readonly ISessionStore _sessionStore; - private object _cookie; + private readonly bool _canClose; + private object? _cookie; private bool _disposed; /// @@ -47,13 +47,6 @@ public class StatelessSessionDelegate : MarshalByRefObject, IStatelessSession /// The inner session. /// The session store. /// Set to true if can close the session. - /// - /// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0618 - /// - /// #pragma warning disable 0618, 0612 - /// #pragma warning restore 0618, 0612 - /// - /// public StatelessSessionDelegate(IStatelessSession innerSession, ISessionStore sessionStore, bool canClose) { InnerSession = innerSession; @@ -71,7 +64,7 @@ public StatelessSessionDelegate(IStatelessSession innerSession, ISessionStore se /// Gets or sets the session store cookie. /// /// The session store cookie. - public object SessionStoreCookie + public object? SessionStoreCookie { get => _cookie; set => _cookie = value; @@ -90,7 +83,7 @@ public void Dispose() /// /// if set to true [closing]. /// - protected IDbConnection DoClose(bool closing) + protected IDbConnection? DoClose(bool closing) { if (_disposed) { @@ -105,9 +98,9 @@ protected IDbConnection DoClose(bool closing) return null; } - internal IDbConnection InternalClose(bool closing) + internal IDbConnection? InternalClose(bool closing) { - IDbConnection connection = null; + IDbConnection? connection = null; _sessionStore.Remove(this); @@ -168,10 +161,10 @@ public static bool AreEqual(IStatelessSession left, IStatelessSession right) /// , /// because can return . /// - public ITransaction Transaction => - InnerSession?.GetSessionImplementation()? - .ConnectionManager? - .CurrentTransaction; + public ITransaction? Transaction => + InnerSession.GetSessionImplementation()? + .ConnectionManager? + .CurrentTransaction; /// public ISessionImplementor GetSessionImplementation() diff --git a/src/Castle.Facilities.NHibernateIntegration/NHibernateFacility.cs b/src/Castle.Facilities.NHibernateIntegration/NHibernateFacility.cs index 9dfc87449..09393d507 100644 --- a/src/Castle.Facilities.NHibernateIntegration/NHibernateFacility.cs +++ b/src/Castle.Facilities.NHibernateIntegration/NHibernateFacility.cs @@ -71,7 +71,7 @@ namespace Castle.Facilities.NHibernateIntegration /// /// public void Save(Data data) /// { - /// using(ISession session = _sessionManager.OpenSession()) + /// using (var session = _sessionManager.OpenSession()) /// { /// session.Save(data); /// } @@ -84,24 +84,25 @@ public class NHibernateFacility : AbstractFacility public static readonly Type DefaultSessionStoreType = typeof(AsyncLocalSessionStore); internal const string ConfigurationBuilderConfigurationKey = "configurationBuilder"; + internal const string UseReflectionOptimizerConfigurationKey = "useReflectionOptimizer"; + internal const string DefaultFlushModeConfigurationKey = "defaultFlushMode"; + internal const string IsWebConfigurationKey = "isWeb"; internal const string SessionFactoryIdConfigurationKey = "id"; internal const string SessionFactoryAliasConfigurationKey = "alias"; - internal const string IsWebConfigurationKey = "isWeb"; - internal const string CustomSessionStoreConfigurationKey = "customStore"; - internal const string DefaultFlushModeConfigurationKey = "defaultFlushMode"; + internal const string SessionStoreConfigurationKey = "sessionStore"; - private const string DefaultConfigurationBuilderKey = "nhfacility.configuration.builder"; - private const string TransactionManagerKey = "nhibernate.transaction.manager"; + private const string ConfigurationBuilderKey = "nhfacility.configuration.builder"; + private const string ConfigurationBuilderFactoryKeyFormat = "{0}.configurationBuilder"; + private const string TransactionManagerKey = "nhfacility.transaction.manager"; private const string SessionFactoryResolverKey = "nhfacility.sessionfactory.resolver"; private const string SessionInterceptorKey = "nhibernate.sessionfactory.interceptor"; - private const string SessionStoreKey = "nhfacility.sessionstore"; - private const string SessionManagerKey = "nhfacility.sessionmanager"; - private const string ConfigurationBuilderForFactoryFormat = "{0}.configurationBuilder"; + private const string SessionStoreKey = "nhfacility.session.store"; + private const string SessionManagerKey = "nhfacility.session.manager"; private ILogger _logger = NullLogger.Instance; private readonly IConfigurationBuilder _configurationBuilder; - private Type _customConfigurationBuilderType; + private Type? _configurationBuilderType; private readonly NHibernateFacilityConfiguration _facilityConfiguration; /// @@ -110,14 +111,16 @@ public class NHibernateFacility : AbstractFacility /// public NHibernateFacility(IConfigurationBuilder configurationBuilder) { - _configurationBuilder = configurationBuilder; + _configurationBuilder = configurationBuilder ?? + throw new ArgumentNullException(nameof(configurationBuilder)); _facilityConfiguration = new NHibernateFacilityConfiguration(configurationBuilder); } /// /// Initializes a new instance of the class. /// - public NHibernateFacility() : this(new DefaultConfigurationBuilder()) + public NHibernateFacility() : + this(new DefaultConfigurationBuilder()) { } @@ -134,7 +137,7 @@ protected override void Init() _facilityConfiguration.Init(Kernel, FacilityConfig); - AssertHasConfig(); + AssertHasConfiguration(); AssertHasAtLeastOneFactoryConfigured(); RegisterComponents(); ConfigureFacility(); @@ -165,32 +168,30 @@ protected virtual void RegisterComponents() /// private void RegisterDefaultConfigurationBuilder() { - if (!_facilityConfiguration.HasConcreteConfigurationBuilder()) + if (!_facilityConfiguration.HasConcreteConfigurationBuilder) { - _customConfigurationBuilderType = _facilityConfiguration.GetConfigurationBuilderType(); + _configurationBuilderType = _facilityConfiguration.GetConfigurationBuilderType(); - if (_facilityConfiguration.HasConfigurationBuilderType()) + if (_facilityConfiguration.HasConfigurationBuilderType) { - if (!typeof(IConfigurationBuilder).IsAssignableFrom(_customConfigurationBuilderType)) + if (!typeof(IConfigurationBuilder).IsAssignableFrom(_configurationBuilderType)) { throw new FacilityException( - string.Format( - "ConfigurationBuilder type '{0}' is invalid. The type must implement the IConfigurationBuilder contract.", - _customConfigurationBuilderType.FullName)); + $"ConfigurationBuilder type '{_configurationBuilderType.FullName}' is invalid. The type must implement the IConfigurationBuilder contract."); } } Kernel.Register( Component.For() - .ImplementedBy(_customConfigurationBuilderType) - .Named(DefaultConfigurationBuilderKey)); + .ImplementedBy(_configurationBuilderType) + .Named(ConfigurationBuilderKey)); } else { Kernel.Register( Component.For() .Instance(_configurationBuilder) - .Named(DefaultConfigurationBuilderKey)); + .Named(ConfigurationBuilderKey)); } } @@ -222,7 +223,7 @@ protected void RegisterSessionStore() /// protected void RegisterSessionManager() { - var defaultFlushMode = _facilityConfiguration.FlushMode; + var defaultFlushMode = _facilityConfiguration.DefaultFlushMode; if (!string.IsNullOrEmpty(defaultFlushMode)) { @@ -249,7 +250,7 @@ protected void RegisterTransactionManager() { if (!Kernel.HasComponent(typeof(ITransactionManager))) { - _logger.Info($"No {nameof(ITransactionManager)} implementation registered on Kernel, registering default {nameof(ITransactionManager)} implementation."); + _logger.Info($"No '{nameof(ITransactionManager)}' implementation registered on Kernel, registering default '{nameof(ITransactionManager)}' implementation."); Kernel.Register( Component.For() @@ -273,9 +274,9 @@ protected void ConfigureFacility() var firstFactory = true; - foreach (var factoryConfig in _facilityConfiguration.Factories) + foreach (var factoryConfiguration in _facilityConfiguration.FactoryConfigurations) { - ConfigureFactories(factoryConfig, sessionFactoryResolver, firstFactory); + ConfigureFactories(factoryConfiguration, sessionFactoryResolver, firstFactory); firstFactory = false; } @@ -292,7 +293,7 @@ protected void ConfigureFacility() /// private void ConfigureReflectionOptimizer() { - NHibernate.Cfg.Environment.UseReflectionOptimizer = _facilityConfiguration.ShouldUseReflectionOptimizer(); + NHibernate.Cfg.Environment.UseReflectionOptimizer = _facilityConfiguration.UseReflectionOptimizer; } /// @@ -301,14 +302,16 @@ private void ConfigureReflectionOptimizer() /// The config. /// The session factory resolver. /// if set to true [first factory]. - protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfiguration, ISessionFactoryResolver sessionFactoryResolver, bool firstFactory) + protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfiguration, + ISessionFactoryResolver sessionFactoryResolver, + bool firstFactory) { var id = factoryConfiguration.Id; if (string.IsNullOrEmpty(id)) { var message = "You must provide a valid 'id' attribute for the 'factory' node. " + - "This id is used as key for the ISessionFactory component registered on the container."; + "This id is used as key for the 'ISessionFactory' component registered on the container."; throw new ConfigurationErrorsException(message); } @@ -317,7 +320,7 @@ protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfigur if (!firstFactory && string.IsNullOrEmpty(alias)) { var message = "You must provide a valid 'alias' attribute for the 'factory' node. " + - "This id is used to obtain the ISession implementation from the SessionManager."; + "This id is used to obtain the 'ISession' implementation from the 'SessionManager'."; throw new ConfigurationErrorsException(message); } @@ -327,7 +330,7 @@ protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfigur } var configurationBuilderType = factoryConfiguration.ConfigurationBuilderType; - var configurationBuilderKey = string.Format(ConfigurationBuilderForFactoryFormat, id); + var configurationBuilderFactoryKey = string.Format(ConfigurationBuilderFactoryKeyFormat, id); IConfigurationBuilder configurationBuilder; if (string.IsNullOrEmpty(configurationBuilderType)) { @@ -338,17 +341,17 @@ protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfigur Kernel.Register( Component.For() .ImplementedBy(Type.GetType(configurationBuilderType)) - .Named(configurationBuilderKey)); - configurationBuilder = Kernel.Resolve(configurationBuilderKey); + .Named(configurationBuilderFactoryKey)); + configurationBuilder = Kernel.Resolve(configurationBuilderFactoryKey); } var configuration = configurationBuilder.GetConfiguration(factoryConfiguration.GetConfiguration()); - // Registers the Configuration object. + // Registers NHibernate Configuration. Kernel.Register( Component.For() .Instance(configuration) - .Named(string.Format("{0}.cfg", id))); + .Named($"{id}.cfg")); // If a Session Factory level interceptor was provided, we use it. if (Kernel.HasComponent(SessionInterceptorKey)) @@ -356,7 +359,7 @@ protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfigur configuration.Interceptor = Kernel.Resolve(SessionInterceptorKey); } - // Registers the ISessionFactory as a component. + // Registers NHibernate ISessionFactory. Kernel.Register( Component.For() .Named(id) @@ -364,7 +367,7 @@ protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfigur .ExtendedProperties(Property.ForKey(Constants.SessionFactoryConfiguration).Eq(configuration)) .LifeStyle.Singleton); - sessionFactoryResolver.RegisterAliasComponentIdMapping(alias, id); + sessionFactoryResolver.RegisterAliasComponentIdMapping(alias!, id!); } #endregion @@ -373,7 +376,7 @@ protected void ConfigureFactories(NHibernateFactoryConfiguration factoryConfigur private void AssertHasAtLeastOneFactoryConfigured() { - if (_facilityConfiguration.HasValidFactory()) + if (_facilityConfiguration.HasValidFactory) { return; } @@ -381,16 +384,16 @@ private void AssertHasAtLeastOneFactoryConfigured() var factoriesConfig = FacilityConfig.Children["factory"]; if (factoriesConfig == null) { - var message = $"You need to configure at least one factory to use the {nameof(NHibernateFacility)}."; + const string message = $"You need to configure at least one factory to use the '{nameof(NHibernateFacility)}'."; throw new ConfigurationErrorsException(message); } } - private void AssertHasConfig() + private void AssertHasConfiguration() { - if (!_facilityConfiguration.IsValid()) + if (!_facilityConfiguration.IsValid) { - var message = $"The {nameof(NHibernateFacility)} requires configuration."; + var message = $"The '{nameof(NHibernateFacility)}' requires configuration."; throw new ConfigurationErrorsException(message); } } @@ -451,15 +454,16 @@ public NHibernateFacility SessionStore() internal class NHibernateFacilityConfiguration { - private IKernel _kernel; - private IConfiguration _facilityConfiguration; - private IConfigurationBuilder _configurationBuilder; - private Type _configurationBuilderType; - private Type _customSessionStoreType; - private bool _isWeb; + private Type _configurationBuilderType = null!; private readonly bool _useReflectionOptimizer = false; + private bool _isWeb; + private Type _sessionStoreType = null!; - public IEnumerable Factories { get; set; } + private IKernel _kernel = null!; + private IConfiguration _facilityConfiguration = null!; + private IConfigurationBuilder? _configurationBuilder; + + public IEnumerable FactoryConfigurations { get; set; } /// /// @@ -468,13 +472,10 @@ public NHibernateFacilityConfiguration(IConfigurationBuilder configurationBuilde { _configurationBuilder = configurationBuilder; - Factories = Enumerable.Empty(); + FactoryConfigurations = Enumerable.Empty(); } - public bool OnWeb => - _isWeb; - - public string FlushMode { get; set; } + public string? DefaultFlushMode { get; set; } /// /// @@ -486,20 +487,19 @@ public void Init(IKernel kernel, IConfiguration facilityConfiguration) _kernel = kernel; _facilityConfiguration = facilityConfiguration; - if (ConfigurationIsValid()) + if (ConfigurationIsValid) { ConfigureWithExternalConfiguration(); } else { - Factories = - new[] + FactoryConfigurations = new[] + { + new NHibernateFactoryConfiguration(new MutableConfiguration("factory")) { - new NHibernateFactoryConfiguration(new MutableConfiguration("factory")) - { - Id = "factory_1" - } - }; + Id = "factory_1" + }, + }; } } @@ -518,106 +518,87 @@ private void ConfigureWithExternalConfiguration() catch (ConverterException) { throw new FacilityException( - string.Format( - "ConfigurationBuilder type '{0}' is invalid or not found.", - builder)); + $"ConfigurationBuilder type '{builder}' is invalid or not found."); } } BuildFactories(); - if (_facilityConfiguration.Attributes[NHibernateFacility.CustomSessionStoreConfigurationKey] != null) + DefaultFlushMode = _facilityConfiguration.Attributes[NHibernateFacility.DefaultFlushModeConfigurationKey]; + + bool.TryParse(_facilityConfiguration.Attributes[NHibernateFacility.IsWebConfigurationKey], out _isWeb); + + if (_facilityConfiguration.Attributes[NHibernateFacility.SessionStoreConfigurationKey] != null) { - var customStoreType = _facilityConfiguration.Attributes[NHibernateFacility.CustomSessionStoreConfigurationKey]; + var sessionStoreType = _facilityConfiguration.Attributes[NHibernateFacility.SessionStoreConfigurationKey]; var converter = (ITypeConverter) _kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey); - SessionStore((Type) converter.PerformConversion(customStoreType, typeof(Type))); + SessionStore((Type) converter.PerformConversion(sessionStoreType, typeof(Type))); } + } - FlushMode = _facilityConfiguration.Attributes[NHibernateFacility.DefaultFlushModeConfigurationKey]; + public bool IsValid => + _facilityConfiguration != null || + _configurationBuilder != null || + _configurationBuilderType != null; - bool.TryParse(_facilityConfiguration.Attributes[NHibernateFacility.IsWebConfigurationKey], out _isWeb); - } + private bool ConfigurationIsValid => + _facilityConfiguration != null && + _facilityConfiguration.Children.Count > 0; - private bool ConfigurationIsValid() - { - return _facilityConfiguration != null && _facilityConfiguration.Children.Count > 0; - } + public bool HasValidFactory => + FactoryConfigurations.Any(); private void BuildFactories() { - Factories = + FactoryConfigurations = _facilityConfiguration.Children - .Select(config => new NHibernateFactoryConfiguration(config)); + .Select(configuration => + new NHibernateFactoryConfiguration(configuration)); } - public void ConfigurationBuilder(Type type) - { - _configurationBuilder = null; - _configurationBuilderType = type; - } + public bool HasConfigurationBuilderType => + _configurationBuilderType != null; - public void SessionStore(Type type) - { - if (!typeof(ISessionStore).IsAssignableFrom(type)) - { - var message = $"The specified customSessionStore type '{type}' " + - $"does not implement the {nameof(ISessionStore)} interface."; - throw new ConfigurationErrorsException(message); - } - - _customSessionStoreType = type; - } - - public void ConfigurationBuilder(IConfigurationBuilder configurationBuilder) - { - _configurationBuilder = configurationBuilder; - } + public bool HasConcreteConfigurationBuilder => + _configurationBuilder != null && !HasConfigurationBuilderType; - public void IsWeb() + public Type GetConfigurationBuilderType() { - _isWeb = true; + return _configurationBuilderType; } - public bool IsValid() + public void ConfigurationBuilder(Type type) { - return _facilityConfiguration != null || - _configurationBuilder != null || - _configurationBuilderType != null; + _configurationBuilderType = type; + _configurationBuilder = null; } - public bool HasValidFactory() + public void ConfigurationBuilder(IConfigurationBuilder configurationBuilder) { - return Factories.Count() > 0; + _configurationBuilder = configurationBuilder; } - public bool ShouldUseReflectionOptimizer() + public bool UseReflectionOptimizer { - if (_facilityConfiguration != null) + get { - if (bool.TryParse(_facilityConfiguration.Attributes["useReflectionOptimizer"], out var result)) + if (_facilityConfiguration != null) { - return result; + if (bool.TryParse(_facilityConfiguration.Attributes[NHibernateFacility.UseReflectionOptimizerConfigurationKey], out var result)) + { + return result; + } + + return false; } - return false; + return _useReflectionOptimizer; } - - return _useReflectionOptimizer; - } - - public bool HasConcreteConfigurationBuilder() - { - return _configurationBuilder != null && !HasConfigurationBuilderType(); } - public Type GetConfigurationBuilderType() - { - return _configurationBuilderType; - } - - public bool HasConfigurationBuilderType() + public void IsWeb() { - return _configurationBuilderType != null; + _isWeb = true; } public Type GetSessionStoreType() @@ -629,13 +610,25 @@ public Type GetSessionStoreType() sessionStoreType = typeof(WebSessionStore); } - if (_customSessionStoreType != null) + if (_sessionStoreType != null) { - sessionStoreType = _customSessionStoreType; + sessionStoreType = _sessionStoreType; } return sessionStoreType; } + + public void SessionStore(Type type) + { + if (!typeof(ISessionStore).IsAssignableFrom(type)) + { + var message = $"The specified sessionStore type '{type}' " + + $"does not implement the '{nameof(ISessionStore)}' interface."; + throw new ConfigurationErrorsException(message); + } + + _sessionStoreType = type; + } } /// @@ -650,9 +643,8 @@ public class NHibernateFactoryConfiguration /// public NHibernateFactoryConfiguration(IConfiguration facilityConfiguration) { - _facilityConfiguration = - facilityConfiguration ?? - throw new ArgumentNullException(nameof(facilityConfiguration)); + _facilityConfiguration = facilityConfiguration ?? + throw new ArgumentNullException(nameof(facilityConfiguration)); Id = facilityConfiguration.Attributes[NHibernateFacility.SessionFactoryIdConfigurationKey]; Alias = facilityConfiguration.Attributes[NHibernateFacility.SessionFactoryAliasConfigurationKey]; @@ -662,17 +654,17 @@ public NHibernateFactoryConfiguration(IConfiguration facilityConfiguration) /// /// Get or sets the factory Id. /// - public string Id { get; set; } + public string? Id { get; set; } /// /// Gets or sets the factory Alias. /// - public string Alias { get; set; } + public string? Alias { get; set; } /// /// Gets or sets the factory ConfigurationBuilder. /// - public string ConfigurationBuilderType { get; set; } + public string? ConfigurationBuilderType { get; set; } /// /// Constructs an IConfiguration instance for this factory. diff --git a/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractDictionaryStackSessionStore.cs b/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractDictionaryStackSessionStore.cs index c1688ec8e..565d0b257 100644 --- a/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractDictionaryStackSessionStore.cs +++ b/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractDictionaryStackSessionStore.cs @@ -29,11 +29,9 @@ public abstract class AbstractDictionaryStackSessionStore : AbstractSessionStore protected AbstractDictionaryStackSessionStore() { SessionSlotKey = - string.Format("nh.facility.stacks.session.{0}", - Guid.NewGuid()); + $"nh.facility.stacks.session.{Guid.NewGuid()}"; StatelessSessionSlotKey = - string.Format("nh.facility.stacks.statelessSession.{0}", - Guid.NewGuid()); + $"nh.facility.stacks.statelessSession.{Guid.NewGuid()}"; } /// @@ -47,7 +45,7 @@ protected AbstractDictionaryStackSessionStore() protected string StatelessSessionSlotKey { get; } /// - protected override Stack GetSessionStackFor(string alias) + protected override Stack GetSessionStackFor(string? alias) { lock (_lock) { @@ -72,7 +70,7 @@ protected override Stack GetSessionStackFor(string alias) dictionary[alias] = stack; } - return stack; + return stack!; } } @@ -89,7 +87,7 @@ protected override Stack GetSessionStackFor(string alias) protected abstract void StoreSessionDictionary(IDictionary> dictionary); /// - protected override Stack GetStatelessSessionStackFor(string alias) + protected override Stack GetStatelessSessionStackFor(string? alias) { lock (_lock) { @@ -114,7 +112,7 @@ protected override Stack GetStatelessSessionStackFor(s dictionary[alias] = stack; } - return stack; + return stack!; } } diff --git a/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractSessionStore.cs b/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractSessionStore.cs index d6ea5349f..4aa8b2430 100644 --- a/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractSessionStore.cs +++ b/src/Castle.Facilities.NHibernateIntegration/SessionStores/AbstractSessionStore.cs @@ -33,7 +33,7 @@ public abstract class AbstractSessionStore : MarshalByRefObject, ISessionStore /// /// /// - public bool IsCurrentActivityEmptyFor(string alias) + public bool IsCurrentActivityEmptyFor(string? alias) { var sessionStack = GetSessionStackFor(alias); var statelessSessionStack = GetStatelessSessionStackFor(alias); @@ -47,7 +47,7 @@ public bool IsCurrentActivityEmptyFor(string alias) /// /// /// - public SessionDelegate FindCompatibleSession(string alias) + public SessionDelegate? FindCompatibleSession(string? alias) { var stack = GetSessionStackFor(alias); @@ -79,7 +79,7 @@ public void Store(string alias, SessionDelegate session) /// public void Remove(SessionDelegate session) { - var stack = (Stack) session.SessionStoreCookie; + var stack = (Stack?) session.SessionStoreCookie; if (stack == null) { @@ -108,7 +108,7 @@ public void Remove(SessionDelegate session) /// /// The alias. /// - protected abstract Stack GetSessionStackFor(string alias); + protected abstract Stack GetSessionStackFor(string? alias); /// /// Find a previously stored for the given alias if available. @@ -116,7 +116,7 @@ public void Remove(SessionDelegate session) /// /// /// - public StatelessSessionDelegate FindCompatibleStatelessSession(string alias) + public StatelessSessionDelegate? FindCompatibleStatelessSession(string? alias) { var stack = GetStatelessSessionStackFor(alias); @@ -148,7 +148,7 @@ public void Store(string alias, StatelessSessionDelegate statelessSession) /// public void Remove(StatelessSessionDelegate statelessSession) { - var stack = (Stack) statelessSession.SessionStoreCookie; + var stack = (Stack?) statelessSession.SessionStoreCookie; if (stack == null) { @@ -177,6 +177,6 @@ public void Remove(StatelessSessionDelegate statelessSession) /// /// The alias. /// - protected abstract Stack GetStatelessSessionStackFor(string alias); + protected abstract Stack GetStatelessSessionStackFor(string? alias); } } diff --git a/src/Castle.Facilities.NHibernateIntegration/SessionStores/AsyncLocalSessionStore.cs b/src/Castle.Facilities.NHibernateIntegration/SessionStores/AsyncLocalSessionStore.cs index c2ea13def..cbad5dfec 100644 --- a/src/Castle.Facilities.NHibernateIntegration/SessionStores/AsyncLocalSessionStore.cs +++ b/src/Castle.Facilities.NHibernateIntegration/SessionStores/AsyncLocalSessionStore.cs @@ -30,7 +30,7 @@ public class AsyncLocalSessionStore : AbstractDictionaryStackSessionStore protected override IDictionary> GetSessionDictionary() { - return _sessionAsyncLocal.Value; + return _sessionAsyncLocal.Value!; } protected override void StoreSessionDictionary(IDictionary> dictionary) @@ -40,7 +40,7 @@ protected override void StoreSessionDictionary(IDictionary> GetStatelessSessionDictionary() { - return _statelessSessionAsyncLocal.Value; + return _statelessSessionAsyncLocal.Value!; } protected override void StoreStatelessSessionDictionary(IDictionary> dictionary) diff --git a/src/Castle.Facilities.NHibernateIntegration/SessionStores/CallContextSessionStore.cs b/src/Castle.Facilities.NHibernateIntegration/SessionStores/CallContextSessionStore.cs index 6b188223f..fd07b9209 100644 --- a/src/Castle.Facilities.NHibernateIntegration/SessionStores/CallContextSessionStore.cs +++ b/src/Castle.Facilities.NHibernateIntegration/SessionStores/CallContextSessionStore.cs @@ -42,7 +42,7 @@ public class CallContextSessionStore : AbstractDictionaryStackSessionStore protected override IDictionary> GetSessionDictionary() { #if NETFRAMEWORK - return CallContext.GetData(SessionSlotKey) as IDictionary>; + return (IDictionary>) CallContext.GetData(SessionSlotKey); #else throw new PlatformNotSupportedException(); #endif @@ -60,7 +60,7 @@ protected override void StoreSessionDictionary(IDictionary> GetStatelessSessionDictionary() { #if NETFRAMEWORK - return CallContext.GetData(StatelessSessionSlotKey) as IDictionary>; + return (IDictionary>) CallContext.GetData(StatelessSessionSlotKey); #else throw new PlatformNotSupportedException(); #endif diff --git a/src/Castle.Facilities.NHibernateIntegration/SessionStores/LogicalCallContextSessionStore.cs b/src/Castle.Facilities.NHibernateIntegration/SessionStores/LogicalCallContextSessionStore.cs index 5d2b65fee..8b0a67a45 100644 --- a/src/Castle.Facilities.NHibernateIntegration/SessionStores/LogicalCallContextSessionStore.cs +++ b/src/Castle.Facilities.NHibernateIntegration/SessionStores/LogicalCallContextSessionStore.cs @@ -42,7 +42,7 @@ public class LogicalCallContextSessionStore : AbstractDictionaryStackSessionStor protected override IDictionary> GetSessionDictionary() { #if NETFRAMEWORK - return CallContext.LogicalGetData(SessionSlotKey) as IDictionary>; + return (IDictionary>) CallContext.LogicalGetData(SessionSlotKey); #else throw new PlatformNotSupportedException(); #endif @@ -60,7 +60,7 @@ protected override void StoreSessionDictionary(IDictionary> GetStatelessSessionDictionary() { #if NETFRAMEWORK - return CallContext.LogicalGetData(StatelessSessionSlotKey) as IDictionary>; + return (IDictionary>) CallContext.LogicalGetData(StatelessSessionSlotKey); #else throw new PlatformNotSupportedException(); #endif diff --git a/src/Castle.Facilities.NHibernateIntegration/SessionStores/WebSessionStore.cs b/src/Castle.Facilities.NHibernateIntegration/SessionStores/WebSessionStore.cs index f80a59aad..f81386e6c 100644 --- a/src/Castle.Facilities.NHibernateIntegration/SessionStores/WebSessionStore.cs +++ b/src/Castle.Facilities.NHibernateIntegration/SessionStores/WebSessionStore.cs @@ -28,24 +28,24 @@ namespace Castle.Facilities.NHibernateIntegration.SessionStores using Microsoft.AspNetCore.Http; #endif -#if NETFRAMEWORK +#if NET /// /// An implementation of /// which relies on . - /// This is intended for legacy ASP.NET projects. + /// This is intended for ASP.NET (Core) projects. /// #else /// /// An implementation of /// which relies on . - /// This is intended for ASP.NET (Core) projects. + /// This is intended for legacy ASP.NET projects. /// #endif public class WebSessionStore : AbstractDictionaryStackSessionStore { #if NET [CLSCompliant(false)] - public IHttpContextAccessor HttpContextAccessor { get; set; } + public IHttpContextAccessor? HttpContextAccessor { get; set; } #endif protected override IDictionary> GetSessionDictionary() @@ -70,31 +70,27 @@ protected override void StoreStatelessSessionDictionary(IDictionary(string key) { -#if NETFRAMEWORK - var value = GetWebContext().Items[key]; -#else +#if NET if (!GetWebContext().Items.TryGetValue(key, out var value)) { - return default; + return default!; } +#else + var value = GetWebContext().Items[key]; #endif - return (T) value; + return (T) value!; } private void StoreSessionDictionaryInWebContext(string key, T value) { -#if NETFRAMEWORK - GetWebContext().Items[key] = value; -#else GetWebContext().Items[key] = value; -#endif } -#if NETFRAMEWORK +#if NET private HttpContext GetWebContext() { - var context = HttpContext.Current; + var context = HttpContextAccessor?.HttpContext; if (context == null) { throw new FacilityException($"{nameof(WebSessionStore)}: Could not obtain reference to {nameof(HttpContext)}."); @@ -105,7 +101,7 @@ private HttpContext GetWebContext() #else private HttpContext GetWebContext() { - var context = HttpContextAccessor.HttpContext; + var context = HttpContext.Current; if (context == null) { throw new FacilityException($"{nameof(WebSessionStore)}: Could not obtain reference to {nameof(HttpContext)}."); diff --git a/src/Castle.Facilities.NHibernateIntegration/Util/DictionaryExtensions.cs b/src/Castle.Facilities.NHibernateIntegration/Util/DictionaryExtensions.cs new file mode 100644 index 000000000..9b9590d18 --- /dev/null +++ b/src/Castle.Facilities.NHibernateIntegration/Util/DictionaryExtensions.cs @@ -0,0 +1,29 @@ +namespace Castle.Facilities.NHibernateIntegration.Util +{ + using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; + + public static class DictionaryExtensions + { + public static bool TryGetValueAs( + this IDictionary dictionary, + TKey key, + [MaybeNullWhen(false)] out TValueAs? valueAs) + where TValueAs : TValue + { + if (dictionary.TryGetValue(key, out var value)) + { + if (value is TValueAs validValueAs) + { + valueAs = validValueAs; + + return true; + } + } + + valueAs = default; + + return false; + } + } +} diff --git a/src/Castle.Facilities.NHibernateIntegration/Util/ReflectionUtility.cs b/src/Castle.Facilities.NHibernateIntegration/Util/ReflectionUtility.cs index 0cc40dd96..961070407 100644 --- a/src/Castle.Facilities.NHibernateIntegration/Util/ReflectionUtility.cs +++ b/src/Castle.Facilities.NHibernateIntegration/Util/ReflectionUtility.cs @@ -37,9 +37,9 @@ public class ReflectionUtility /// The keys holds the names of the properties. /// The values are the values of the properties. /// - public static IDictionary GetPropertiesDictionary(object obj) + public static IDictionary GetPropertiesDictionary(object obj) { - var dictionary = new Dictionary(); + var dictionary = new Dictionary(); foreach (var property in obj.GetType().GetProperties(BindingFlags)) {