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.
This commit is contained in:
parent
d87f36898b
commit
50a056d110
@ -16,6 +16,14 @@ namespace DigitalData.Core.Abstractions
|
|||||||
|
|
||||||
private bool IsBuilt => _lazyServiceProvider.IsValueCreated;
|
private bool IsBuilt => _lazyServiceProvider.IsValueCreated;
|
||||||
|
|
||||||
|
private PostBuildBehavior _pbBehavior = PostBuildBehavior.ThrowException;
|
||||||
|
|
||||||
|
public Factory BehaveOnPostBuild(PostBuildBehavior postBuildBehavior)
|
||||||
|
{
|
||||||
|
_pbBehavior = postBuildBehavior;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public Factory()
|
public Factory()
|
||||||
{
|
{
|
||||||
_lazyServiceProvider = new Lazy<IServiceProvider>(() => _serviceCollection.BuildServiceProvider());
|
_lazyServiceProvider = new Lazy<IServiceProvider>(() => _serviceCollection.BuildServiceProvider());
|
||||||
@ -42,7 +50,8 @@ namespace DigitalData.Core.Abstractions
|
|||||||
get => _serviceCollection[index];
|
get => _serviceCollection[index];
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
EnsureNotBuilt();
|
if (EnsureBuilt())
|
||||||
|
return;
|
||||||
_serviceCollection[index] = value;
|
_serviceCollection[index] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,25 +63,29 @@ namespace DigitalData.Core.Abstractions
|
|||||||
|
|
||||||
public void Insert(int index, ServiceDescriptor item)
|
public void Insert(int index, ServiceDescriptor item)
|
||||||
{
|
{
|
||||||
EnsureNotBuilt();
|
if (EnsureBuilt())
|
||||||
|
return;
|
||||||
_serviceCollection.Insert(index, item);
|
_serviceCollection.Insert(index, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveAt(int index)
|
public void RemoveAt(int index)
|
||||||
{
|
{
|
||||||
EnsureNotBuilt();
|
if (EnsureBuilt())
|
||||||
|
return;
|
||||||
_serviceCollection.RemoveAt(index);
|
_serviceCollection.RemoveAt(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Add(ServiceDescriptor item)
|
public void Add(ServiceDescriptor item)
|
||||||
{
|
{
|
||||||
EnsureNotBuilt();
|
if (EnsureBuilt())
|
||||||
|
return;
|
||||||
_serviceCollection.Add(item);
|
_serviceCollection.Add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
EnsureNotBuilt();
|
if (EnsureBuilt())
|
||||||
|
return;
|
||||||
_serviceCollection.Clear();
|
_serviceCollection.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +101,8 @@ namespace DigitalData.Core.Abstractions
|
|||||||
|
|
||||||
public bool Remove(ServiceDescriptor item)
|
public bool Remove(ServiceDescriptor item)
|
||||||
{
|
{
|
||||||
EnsureNotBuilt();
|
if (EnsureBuilt())
|
||||||
|
return false;
|
||||||
return _serviceCollection.Remove(item);
|
return _serviceCollection.Remove(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,11 +118,23 @@ namespace DigitalData.Core.Abstractions
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Helpers
|
#region Helpers
|
||||||
private void EnsureNotBuilt()
|
private bool EnsureBuilt()
|
||||||
{
|
{
|
||||||
if (IsBuilt)
|
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
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum PostBuildBehavior
|
||||||
|
{
|
||||||
|
ThrowException,
|
||||||
|
Ignore
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user