1+ using  System . Threading . Tasks ; 
2+ using  AspectCore . DependencyInjection ; 
3+ using  AspectCore . DynamicProxy ; 
4+ using  AspectCore . Extensions . Autofac ; 
5+ using  AspectCore . Extensions . DependencyInjection ; 
6+ using  Autofac ; 
7+ using  Autofac . Extensions . DependencyInjection ; 
8+ using  Microsoft . Extensions . DependencyInjection ; 
9+ using  Xunit ; 
10+ 
11+ namespace  AspectCoreTest . Autofac ; 
12+ 
13+ public  class  KeyedServiceTests 
14+ { 
15+     public  class  InterceptKey  :  AbstractInterceptorAttribute 
16+     { 
17+         private  int  _key ; 
18+ 
19+         public  InterceptKey ( int  key ) 
20+         { 
21+             _key  =  key ; 
22+         } 
23+ 
24+         public  override  async  Task  Invoke ( AspectContext  context ,  AspectDelegate  next ) 
25+         { 
26+             await  context . Invoke ( next ) ; 
27+             context . ReturnValue  =  _key ; 
28+         } 
29+     } 
30+ 
31+     public  interface  IKeydService 
32+     { 
33+         int  Get ( ) ; 
34+         int  GetIntercept ( ) ; 
35+     } 
36+ 
37+     public  class  KeydService  :  IKeydService 
38+     { 
39+         private  int  _current  =  0 ; 
40+         public  int  Get ( ) 
41+         { 
42+             _current ++ ; 
43+             return  _current ; 
44+         } 
45+ 
46+         [ InterceptKey ( 1000 ) ] 
47+         public  int  GetIntercept ( ) 
48+         { 
49+             return  2 ; 
50+         } 
51+     } 
52+ #if NET8_0_OR_GREATER 
53+     [ Fact ] 
54+     public  void  GetKeydService_WithServiceProvider ( ) 
55+     { 
56+         var  services  =  new  ServiceCollection ( ) ; 
57+         var  builder  =  new  ContainerBuilder ( ) ; 
58+         builder . RegisterDynamicProxy ( ) ; 
59+         services . AddKeyedScoped < IKeydService ,  KeydService > ( "key1" ) ; 
60+         services . AddKeyedScoped < IKeydService ,  KeydService > ( "key2" ) ; 
61+         builder . Populate ( services ) ; 
62+         var  serviceProvider  =  new  AutofacServiceProvider ( builder . Build ( ) ) ; 
63+         var  keydService  =  serviceProvider . GetKeyedService < IKeydService > ( "key1" ) ; 
64+         Assert . Equal ( 1 ,  keydService . Get ( ) ) ; 
65+         Assert . Equal ( 1000 ,  keydService . GetIntercept ( ) ) ; 
66+ 
67+         var  keyd2Service  =  serviceProvider . GetKeyedService < IKeydService > ( "key2" ) ; 
68+         //不同实例 
69+         Assert . Equal ( 1 ,  keyd2Service . Get ( ) ) ; 
70+         Assert . Equal ( 1000 ,  keyd2Service . GetIntercept ( ) ) ; 
71+     } 
72+ #endif
73+ } 
0 commit comments