@@ -70,12 +70,13 @@ public IUnityContainer RegisterType(Type typeFrom, Type typeTo, string name,
70
70
71
71
// Register Type
72
72
var buildType = typeFrom ?? typeTo ;
73
+ var container = ( lifetimeManager is ISingletonLifetimePolicy ) ? GetRootContainer ( ) : this ;
73
74
74
75
// Clear build plan
75
- _policies . Set ( buildType , name , typeof ( IBuildPlanPolicy ) , new OverriddenBuildPlanMarkerPolicy ( ) ) ;
76
+ container . _policies . Set ( buildType , name , typeof ( IBuildPlanPolicy ) , new OverriddenBuildPlanMarkerPolicy ( ) ) ;
76
77
77
78
// Register Type/Name
78
- _registeredNames . RegisterType ( buildType , name ) ;
79
+ container . _registeredNames . RegisterType ( buildType , name ) ;
79
80
80
81
// Add Injection Members to the list
81
82
if ( null != injectionMembers && injectionMembers . Length > 0 )
@@ -85,17 +86,17 @@ public IUnityContainer RegisterType(Type typeFrom, Type typeTo, string name,
85
86
if ( member is IInjectionFactory && null != typeFrom && typeFrom != typeTo )
86
87
throw new InvalidOperationException ( Constants . CannotInjectFactory ) ;
87
88
88
- member . AddPolicies ( buildType , typeTo , name , _policies ) ;
89
+ member . AddPolicies ( buildType , typeTo , name , container . _policies ) ;
89
90
}
90
91
}
91
92
92
93
// Register policies for each strategy
93
- // TODO: Use cached version to impreve performance
94
- foreach ( var strategy in _strategies . OfType < IRegisterTypeStrategy > ( ) )
94
+ var strategies = container . _registerTypeStrategies ;
95
+ foreach ( var strategy in strategies )
95
96
strategy . RegisterType ( _context , typeFrom , typeTo , name , lifetimeManager , injectionMembers ) ;
96
97
97
98
// Raise event
98
- Registering ? . Invoke ( this , new RegisterEventArgs ( typeFrom , typeTo , name , lifetimeManager ) ) ;
99
+ container . Registering ? . Invoke ( this , new RegisterEventArgs ( typeFrom , typeTo , name , lifetimeManager ) ) ;
99
100
100
101
return this ;
101
102
}
@@ -132,21 +133,20 @@ public IUnityContainer RegisterInstance(Type toType, string name, object instanc
132
133
133
134
var type = toType ?? instance . GetType ( ) ;
134
135
var lifetime = manager ?? new ContainerControlledLifetimeManager ( ) ;
136
+ var container = ( manager is ISingletonLifetimePolicy ) ? GetRootContainer ( ) : this ;
135
137
136
- _registeredNames . RegisterType ( type , name ) ;
138
+ container . _registeredNames . RegisterType ( type , name ) ;
137
139
138
140
lifetime . SetValue ( instance ) ;
139
- SetLifetimeManager ( type , name , lifetime ) ;
141
+ container . SetLifetimeManager ( type , name , lifetime ) ;
140
142
141
143
if ( lifetime is IBuildPlanPolicy buildPlanPolicy )
142
- _policies . Set ( type , name , typeof ( IBuildPlanPolicy ) , buildPlanPolicy ) ;
144
+ container . _policies . Set ( type , name , typeof ( IBuildPlanPolicy ) , buildPlanPolicy ) ;
143
145
else
144
- _policies . Set ( type , name , typeof ( IBuildPlanPolicy ) , new OverriddenBuildPlanMarkerPolicy ( ) ) ;
146
+ container . _policies . Set ( type , name , typeof ( IBuildPlanPolicy ) , new OverriddenBuildPlanMarkerPolicy ( ) ) ;
145
147
146
- RegisteringInstance ? . Invoke ( this , new RegisterInstanceEventArgs ( type ,
147
- instance ,
148
- name ,
149
- lifetime ) ) ;
148
+ container . RegisteringInstance ? . Invoke ( this , new RegisterInstanceEventArgs ( type , instance ,
149
+ name , lifetime ) ) ;
150
150
return this ;
151
151
}
152
152
0 commit comments