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