@@ -7,7 +7,9 @@ namespace ZeroIoC
7
7
public abstract class ZeroIoCContainer : IZeroIoCResolver
8
8
{
9
9
protected readonly Dictionary < Type , IInstanceResolver > Resolvers = new Dictionary < Type , IInstanceResolver > ( ) ;
10
- protected readonly Dictionary < Type , IInstanceResolver > ScopedResolvers = new Dictionary < Type , IInstanceResolver > ( ) ;
10
+
11
+ protected readonly Dictionary < Type , IInstanceResolver > ScopedResolvers =
12
+ new Dictionary < Type , IInstanceResolver > ( ) ;
11
13
12
14
protected readonly bool Scoped ;
13
15
@@ -34,7 +36,7 @@ public virtual IZeroIoCResolver Clone()
34
36
}
35
37
36
38
protected abstract void Bootstrap ( IZeroIoCContainerBootstrapper bootstrapper ) ;
37
-
39
+
38
40
public object Resolve ( Type type )
39
41
{
40
42
if ( Resolvers . TryGetValue ( type , out var entry ) )
@@ -58,7 +60,7 @@ public object Resolve(Type type)
58
60
ExceptionHelper . ServiceIsNotRegistered ( type . FullName ) ;
59
61
return null ;
60
62
}
61
-
63
+
62
64
public object Resolve ( Type type , IOverrides overrides )
63
65
{
64
66
if ( Resolvers . TryGetValue ( type , out var entry ) )
@@ -83,7 +85,8 @@ public object Resolve(Type type, IOverrides overrides)
83
85
return null ;
84
86
}
85
87
86
- public void AddDelegate ( Func < IZeroIoCResolver , object > resolver , Type interfaceType , Reuse reuse = Reuse . Transient )
88
+ public void AddDelegate ( Func < IZeroIoCResolver , object > resolver , Type interfaceType ,
89
+ Reuse reuse = Reuse . Transient )
87
90
{
88
91
switch ( reuse )
89
92
{
@@ -100,13 +103,14 @@ public void AddDelegate(Func<IZeroIoCResolver, object> resolver, Type interfaceT
100
103
throw new ArgumentOutOfRangeException ( nameof ( reuse ) , reuse , null ) ;
101
104
}
102
105
}
103
-
104
- public void ReplaceDelegate ( Func < IZeroIoCResolver , object > resolver , Type interfaceType , Reuse reuse = Reuse . Transient )
106
+
107
+ public void ReplaceDelegate ( Func < IZeroIoCResolver , object > resolver , Type interfaceType ,
108
+ Reuse reuse = Reuse . Transient )
105
109
{
106
110
switch ( reuse )
107
111
{
108
112
case Reuse . Scoped :
109
- ScopedResolvers [ interfaceType ] = new SingletonResolver ( resolver ) ;
113
+ ScopedResolvers [ interfaceType ] = new SingletonResolver ( resolver ) ;
110
114
break ;
111
115
case Reuse . Singleton :
112
116
Resolvers [ interfaceType ] = new SingletonResolver ( resolver ) ;
@@ -123,7 +127,7 @@ public void AddInstance<TValue>(TValue value)
123
127
{
124
128
Resolvers . Add ( typeof ( TValue ) , new SingletonResolver ( o => value ) ) ;
125
129
}
126
-
130
+
127
131
public void ReplaceInstance < TValue > ( TValue value )
128
132
{
129
133
Resolvers [ typeof ( TValue ) ] = new SingletonResolver ( o => value ) ;
@@ -144,9 +148,12 @@ public void Merge(ZeroIoCContainer container)
144
148
145
149
public void Dispose ( )
146
150
{
147
- foreach ( var resolver in Resolvers . Values )
151
+ if ( ! Scoped )
148
152
{
149
- resolver . Dispose ( ) ;
153
+ foreach ( var resolver in Resolvers . Values )
154
+ {
155
+ resolver . Dispose ( ) ;
156
+ }
150
157
}
151
158
152
159
foreach ( var resolver in ScopedResolvers . Values )
0 commit comments