Skip to content

Commit 0eead35

Browse files
committed
Abstractions Updates
1 parent 123d4bc commit 0eead35

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

src/Builder/Context/BuilderContext.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,22 @@ public object Get(Type type, string name, Type policyInterface)
8686
: Registration.Get(policyInterface));
8787
}
8888

89+
public object Get(Type type, Type policyInterface)
90+
{
91+
return List.Get(type, UnityContainer.All, policyInterface) ??
92+
((UnityContainer)Container).GetPolicy(type, UnityContainer.All, policyInterface);
93+
}
94+
8995
public void Set(Type policyInterface, object policy)
9096
{
9197
List.Set(RegistrationType, Name, policyInterface, policy);
9298
}
9399

100+
public void Set(Type type, Type policyInterface, object policy)
101+
{
102+
List.Set(type, UnityContainer.All, policyInterface, policy);
103+
}
104+
94105
public void Set(Type type, string name, Type policyInterface, object policy)
95106
{
96107
List.Set(type, name, policyInterface, policy);

src/Storage/PolicyList.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,25 @@ public object Get(Type type, string name, Type policyInterface)
7676
return _innerPolicyList?.Get(type, name, policyInterface);
7777
}
7878

79+
public object Get(Type type, Type policyInterface)
80+
{
81+
object policy = null;
82+
83+
if (_policies?.TryGetValue(new PolicyKey(type, UnityContainer.All, policyInterface), out policy) ?? false)
84+
{
85+
return policy;
86+
}
87+
88+
return _innerPolicyList?.Get(type, UnityContainer.All, policyInterface);
89+
}
90+
91+
public void Set(Type type, Type policyInterface, object policy)
92+
{
93+
if (null == _policies)
94+
_policies = new Dictionary<PolicyKey, object>(PolicyKeyEqualityComparer.Default);
95+
96+
_policies[new PolicyKey(type, UnityContainer.All, policyInterface)] = policy;
97+
}
7998

8099
public void Set(Type type, string name, Type policyInterface, object policy)
81100
{

src/UnityContainer.ContainerContext.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,16 @@ public override event EventHandler<ChildContainerCreatedEventArgs> ChildContaine
9292
public virtual void ClearAll()
9393
{
9494
}
95+
96+
public virtual object Get(Type type, Type policyInterface)
97+
=> _container.GetPolicy(type, All, policyInterface);
9598

96-
public virtual object Get(Type type, string name, Type policyInterface)
99+
public virtual object Get(Type type, string name, Type policyInterface)
97100
=> _container.GetPolicy(type, name, policyInterface);
98101

102+
public virtual void Set(Type type, Type policyInterface, object policy)
103+
=> _container.SetPolicy(type, All, policyInterface, policy);
104+
99105
public virtual void Set(Type type, string name, Type policyInterface, object policy)
100106
=> _container.SetPolicy(type, name, policyInterface, policy);
101107

src/UnityContainer.Implementation.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,14 @@ internal RegistrationContext(UnityContainer container, Type type, string name, I
405405

406406
#region IPolicyList
407407

408+
public object Get(Type type, Type policyInterface)
409+
{
410+
if (_type != type)
411+
return _container.GetPolicy(type, All, policyInterface);
412+
413+
return _registration.Get(policyInterface);
414+
}
415+
408416
public object Get(Type type, string name, Type policyInterface)
409417
{
410418
if (_type != type || _name != name)
@@ -413,6 +421,13 @@ public object Get(Type type, string name, Type policyInterface)
413421
return _registration.Get(policyInterface);
414422
}
415423

424+
public void Set(Type type, Type policyInterface, object policy)
425+
{
426+
if (_type != type)
427+
_container.SetPolicy(type, All, policyInterface, policy);
428+
else
429+
_registration.Set(policyInterface, policy);
430+
}
416431

417432
public void Set(Type type, string name, Type policyInterface, object policy)
418433
{

0 commit comments

Comments
 (0)