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