11using System . Collections . Generic ;
2+ using System . Security . Cryptography . X509Certificates ;
23using EfCore . Ydb . Extensions ;
34using Microsoft . EntityFrameworkCore . Infrastructure ;
45using Microsoft . Extensions . DependencyInjection ;
6+ using Ydb . Sdk . Auth ;
57
68namespace EfCore . Ydb . Infrastructure . Internal ;
79
810public class YdbOptionsExtension : RelationalOptionsExtension
911{
12+ public ICredentialsProvider ? CredentialsProvider { get ; private set ; }
13+
14+ public X509Certificate2Collection ? ServerCertificates { get ; private set ; }
15+
1016 private DbContextOptionsExtensionInfo ? _info ;
1117
1218 public YdbOptionsExtension ( )
@@ -15,22 +21,40 @@ public YdbOptionsExtension()
1521
1622 private YdbOptionsExtension ( YdbOptionsExtension copyFrom ) : base ( copyFrom )
1723 {
24+ CredentialsProvider = copyFrom . CredentialsProvider ;
25+ ServerCertificates = copyFrom . ServerCertificates ;
26+ }
27+
28+ protected override RelationalOptionsExtension Clone ( ) => new YdbOptionsExtension ( this ) ;
29+
30+ public override void ApplyServices ( IServiceCollection services ) => services . AddEntityFrameworkYdb ( ) ;
31+
32+ public override DbContextOptionsExtensionInfo Info => _info ??= new ExtensionInfo ( this ) ;
33+
34+ public YdbOptionsExtension WithCredentialsProvider ( ICredentialsProvider ? credentialsProvider )
35+ {
36+ var clone = ( YdbOptionsExtension ) Clone ( ) ;
37+
38+ clone . CredentialsProvider = credentialsProvider ;
39+
40+ return clone ;
1841 }
1942
20- protected override RelationalOptionsExtension Clone ( )
21- => new YdbOptionsExtension ( this ) ;
43+ public YdbOptionsExtension WithServerCertificates ( X509Certificate2Collection ? serverCertificates )
44+ {
45+ var clone = ( YdbOptionsExtension ) Clone ( ) ;
2246
23- public override void ApplyServices ( IServiceCollection services )
24- => services . AddEntityFrameworkYdb ( ) ;
47+ clone . ServerCertificates = serverCertificates ;
2548
26- public override DbContextOptionsExtensionInfo Info
27- => _info ??= new ExtensionInfo ( this ) ;
49+ return clone ;
50+ }
2851
29- private sealed class ExtensionInfo ( IDbContextOptionsExtension extension ) : RelationalExtensionInfo ( extension )
52+ private sealed class ExtensionInfo ( YdbOptionsExtension extension ) : RelationalExtensionInfo ( extension )
3053 {
3154 public override bool IsDatabaseProvider => true ;
3255
33- // TODO: Right now it's stub
34- public override void PopulateDebugInfo ( IDictionary < string , string > debugInfo ) => debugInfo [ "Hello" ] = "World!" ;
56+ public override void PopulateDebugInfo ( IDictionary < string , string > debugInfo )
57+ {
58+ }
3559 }
3660}
0 commit comments