Compare commits

...

3 Commits

Author SHA1 Message Date
5567f6731b chore(Core.Abstractions): bump to 4.3.0 2025-10-29 16:25:32 +01:00
fc297d92fa feat(factory): add IServiceScopeFactory property to Factory class
Added ScopeFactory property to the Factory class to expose IServiceScopeFactory through GetRequiredService<IServiceScopeFactory>().
This enables scoped service creation from the factory instance.
2025-10-29 16:08:43 +01:00
50a056d110 feat(Factory): add PostBuildBehavior to control post-build modification behavior in Factory
Introduced PostBuildBehavior enum and BehaveOnPostBuild() method to configure behavior when modifying the service collection after the service provider is built.
Replaced EnsureNotBuilt() with EnsureBuilt() to support configurable handling (throw exception or ignore).
This improves flexibility in scenarios where post-build service modifications should be optionally allowed or silently ignored.
2025-10-29 15:57:36 +01:00
2 changed files with 39 additions and 11 deletions

View File

@ -16,9 +16,9 @@
<RepositoryUrl>http://git.dd:3000/AppStd/WebCoreModules.git</RepositoryUrl>
<PackAsTool>False</PackAsTool>
<PackageIcon>core_icon.png</PackageIcon>
<Version>4.2.0</Version>
<AssemblyVersion>4.2.0</AssemblyVersion>
<FileVersion>4.2.0</FileVersion>
<Version>4.3.0</Version>
<AssemblyVersion>4.3.0</AssemblyVersion>
<FileVersion>4.3.0</FileVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -16,6 +16,14 @@ namespace DigitalData.Core.Abstractions
private bool IsBuilt => _lazyServiceProvider.IsValueCreated;
private PostBuildBehavior _pbBehavior = PostBuildBehavior.ThrowException;
public Factory BehaveOnPostBuild(PostBuildBehavior postBuildBehavior)
{
_pbBehavior = postBuildBehavior;
return this;
}
public Factory()
{
_lazyServiceProvider = new Lazy<IServiceProvider>(() => _serviceCollection.BuildServiceProvider());
@ -30,6 +38,8 @@ namespace DigitalData.Core.Abstractions
{
return _lazyServiceProvider.Value.GetService(serviceType);
}
public IServiceScopeFactory ScopeFactory => this.GetRequiredService<IServiceScopeFactory>();
#endregion
#region Service Collection
@ -42,7 +52,8 @@ namespace DigitalData.Core.Abstractions
get => _serviceCollection[index];
set
{
EnsureNotBuilt();
if (EnsureBuilt())
return;
_serviceCollection[index] = value;
}
}
@ -54,25 +65,29 @@ namespace DigitalData.Core.Abstractions
public void Insert(int index, ServiceDescriptor item)
{
EnsureNotBuilt();
if (EnsureBuilt())
return;
_serviceCollection.Insert(index, item);
}
public void RemoveAt(int index)
{
EnsureNotBuilt();
if (EnsureBuilt())
return;
_serviceCollection.RemoveAt(index);
}
public void Add(ServiceDescriptor item)
{
EnsureNotBuilt();
if (EnsureBuilt())
return;
_serviceCollection.Add(item);
}
public void Clear()
{
EnsureNotBuilt();
if (EnsureBuilt())
return;
_serviceCollection.Clear();
}
@ -88,7 +103,8 @@ namespace DigitalData.Core.Abstractions
public bool Remove(ServiceDescriptor item)
{
EnsureNotBuilt();
if (EnsureBuilt())
return false;
return _serviceCollection.Remove(item);
}
@ -104,11 +120,23 @@ namespace DigitalData.Core.Abstractions
#endregion
#region Helpers
private void EnsureNotBuilt()
private bool EnsureBuilt()
{
if (IsBuilt)
throw new InvalidOperationException("Service provider has already been built. No further service modifications are allowed.");
{
return _pbBehavior == PostBuildBehavior.ThrowException
? throw new InvalidOperationException("Service provider has already been built. No further service modifications are allowed.")
: true;
}
else
return false;
}
#endregion
}
public enum PostBuildBehavior
{
ThrowException,
Ignore
}
}