Skip to content

Commit 29d0f9c

Browse files
pranavkmTratcherJamesNK
authored
Add more doc comments (#28910)
* Add more doc comments * DataProtection * WebUtilities * JSInterop * Apply suggestions from code review Co-authored-by: Chris Ross <[email protected]> Co-authored-by: James Newton-King <[email protected]> Co-authored-by: Chris Ross <[email protected]> Co-authored-by: James Newton-King <[email protected]>
1 parent 674662d commit 29d0f9c

File tree

48 files changed

+458
-23
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+458
-23
lines changed

src/DataProtection/DataProtection/src/AuthenticatedEncryption/AuthenticatedEncryptorFactory.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@ public sealed class AuthenticatedEncryptorFactory : IAuthenticatedEncryptorFacto
2222
{
2323
private readonly ILoggerFactory _loggerFactory;
2424

25+
/// <summary>
26+
/// Initializes a new instance of <see cref="AuthenticatedEncryptorFactory"/>.
27+
/// </summary>
28+
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
2529
public AuthenticatedEncryptorFactory(ILoggerFactory loggerFactory)
2630
{
2731
_loggerFactory = loggerFactory;
2832
}
2933

34+
/// <inheritdoc />
3035
public IAuthenticatedEncryptor? CreateEncryptorInstance(IKey key)
3136
{
32-
var descriptor = key.Descriptor as AuthenticatedEncryptorDescriptor;
33-
if (descriptor == null)
37+
if (key.Descriptor is not AuthenticatedEncryptorDescriptor descriptor)
3438
{
3539
return null;
3640
}

src/DataProtection/DataProtection/src/AuthenticatedEncryption/CngCbcAuthenticatedEncryptorFactory.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,19 @@ public sealed class CngCbcAuthenticatedEncryptorFactory : IAuthenticatedEncrypto
2323
{
2424
private readonly ILogger _logger;
2525

26+
/// <summary>
27+
/// Initializes a new instance of <see cref="CngCbcAuthenticatedEncryptorFactory"/>.
28+
/// </summary>
29+
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
2630
public CngCbcAuthenticatedEncryptorFactory(ILoggerFactory loggerFactory)
2731
{
2832
_logger = loggerFactory.CreateLogger<CngCbcAuthenticatedEncryptorFactory>();
2933
}
3034

35+
/// <inheritdoc />
3136
public IAuthenticatedEncryptor? CreateEncryptorInstance(IKey key)
3237
{
33-
var descriptor = key.Descriptor as CngCbcAuthenticatedEncryptorDescriptor;
34-
if (descriptor == null)
38+
if (key.Descriptor is not CngCbcAuthenticatedEncryptorDescriptor descriptor)
3539
{
3640
return null;
3741
}

src/DataProtection/DataProtection/src/AuthenticatedEncryption/CngGcmAuthenticatedEncryptorFactory.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,16 @@ public sealed class CngGcmAuthenticatedEncryptorFactory : IAuthenticatedEncrypto
2323
{
2424
private readonly ILogger _logger;
2525

26+
/// <summary>
27+
/// Initializes a new instance of <see cref="CngCbcAuthenticatedEncryptorFactory"/>.
28+
/// </summary>
29+
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
2630
public CngGcmAuthenticatedEncryptorFactory(ILoggerFactory loggerFactory)
2731
{
2832
_logger = loggerFactory.CreateLogger<CngGcmAuthenticatedEncryptorFactory>();
2933
}
3034

35+
/// <inheritdoc />
3136
public IAuthenticatedEncryptor? CreateEncryptorInstance(IKey key)
3237
{
3338
var descriptor = key.Descriptor as CngGcmAuthenticatedEncryptorDescriptor;

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/AlgorithmConfiguration.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
55

66
namespace Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel
77
{
8+
/// <summary>
9+
/// A factory for producing <see cref="IAuthenticatedEncryptorDescriptor"/>.
10+
/// </summary>
811
public abstract class AlgorithmConfiguration
912
{
1013
internal const int KDK_SIZE_IN_BYTES = 512 / 8;

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/AuthenticatedEncryptorConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public sealed class AuthenticatedEncryptorConfiguration : AlgorithmConfiguration
3030
/// </remarks>
3131
public ValidationAlgorithm ValidationAlgorithm { get; set; } = ValidationAlgorithm.HMACSHA256;
3232

33+
/// <inheritdoc />
3334
public override IAuthenticatedEncryptorDescriptor CreateNewDescriptor()
3435
{
3536
var internalConfiguration = (IInternalAlgorithmConfiguration)this;

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/AuthenticatedEncryptorDescriptor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ namespace Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.Configurat
1212
/// </summary>
1313
public sealed class AuthenticatedEncryptorDescriptor : IAuthenticatedEncryptorDescriptor
1414
{
15+
/// <summary>
16+
/// Initializes a new instance of <see cref="AuthenticatedEncryptorDescriptor"/>.
17+
/// </summary>
18+
/// <param name="configuration">The <see cref="AuthenticatedEncryptorDescriptor"/>.</param>
19+
/// <param name="masterKey">The master key.</param>
1520
public AuthenticatedEncryptorDescriptor(AuthenticatedEncryptorConfiguration configuration, ISecret masterKey)
1621
{
1722
if (configuration == null)
@@ -32,6 +37,7 @@ public AuthenticatedEncryptorDescriptor(AuthenticatedEncryptorConfiguration conf
3237

3338
internal AuthenticatedEncryptorConfiguration Configuration { get; }
3439

40+
/// <inheritdoc/>
3541
public XmlSerializedDescriptorInfo ExportToXml()
3642
{
3743
// <descriptor>

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/CngCbcAuthenticatedEncryptorConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public sealed class CngCbcAuthenticatedEncryptorConfiguration : AlgorithmConfigu
7373
[ApplyPolicy]
7474
public string? HashAlgorithmProvider { get; set; } = null;
7575

76+
/// <inheritdoc />
7677
public override IAuthenticatedEncryptorDescriptor CreateNewDescriptor()
7778
{
7879
var internalConfiguration = (IInternalAlgorithmConfiguration)this;

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/CngCbcAuthenticatedEncryptorDescriptor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ namespace Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.Configurat
1414
[SupportedOSPlatform("windows")]
1515
public sealed class CngCbcAuthenticatedEncryptorDescriptor : IAuthenticatedEncryptorDescriptor
1616
{
17+
/// <summary>
18+
/// Initializes a new instance of <see cref="CngCbcAuthenticatedEncryptorDescriptor"/>.
19+
/// </summary>
20+
/// <param name="configuration">The <see cref="CngCbcAuthenticatedEncryptorConfiguration"/>.</param>
21+
/// <param name="masterKey">The master key.</param>
1722
public CngCbcAuthenticatedEncryptorDescriptor(CngCbcAuthenticatedEncryptorConfiguration configuration, ISecret masterKey)
1823
{
1924
if (configuration == null)
@@ -34,6 +39,7 @@ public CngCbcAuthenticatedEncryptorDescriptor(CngCbcAuthenticatedEncryptorConfig
3439

3540
internal CngCbcAuthenticatedEncryptorConfiguration Configuration { get; }
3641

42+
/// <inheritdoc />
3743
public XmlSerializedDescriptorInfo ExportToXml()
3844
{
3945
// <descriptor>

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/CngGcmAuthenticatedEncryptorConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public sealed class CngGcmAuthenticatedEncryptorConfiguration : AlgorithmConfigu
4949
[ApplyPolicy]
5050
public int EncryptionAlgorithmKeySize { get; set; } = 256;
5151

52+
/// <inheritdoc />
5253
public override IAuthenticatedEncryptorDescriptor CreateNewDescriptor()
5354
{
5455
var internalConfiguration = (IInternalAlgorithmConfiguration)this;

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/CngGcmAuthenticatedEncryptorDescriptor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ namespace Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.Configurat
1414
[SupportedOSPlatform("windows")]
1515
public sealed class CngGcmAuthenticatedEncryptorDescriptor : IAuthenticatedEncryptorDescriptor
1616
{
17+
/// <summary>
18+
/// Initializes a new instance of <see cref="CngGcmAuthenticatedEncryptorDescriptor"/>.
19+
/// </summary>
20+
/// <param name="configuration">The <see cref="CngCbcAuthenticatedEncryptorConfiguration"/>.</param>
21+
/// <param name="masterKey">The master key.</param>
1722
public CngGcmAuthenticatedEncryptorDescriptor(CngGcmAuthenticatedEncryptorConfiguration configuration, ISecret masterKey)
1823
{
1924
if (configuration == null)
@@ -34,6 +39,7 @@ public CngGcmAuthenticatedEncryptorDescriptor(CngGcmAuthenticatedEncryptorConfig
3439

3540
internal CngGcmAuthenticatedEncryptorConfiguration Configuration { get; }
3641

42+
/// <inheritdoc />
3743
public XmlSerializedDescriptorInfo ExportToXml()
3844
{
3945
// <descriptor>

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/ManagedAuthenticatedEncryptorConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public sealed class ManagedAuthenticatedEncryptorConfiguration : AlgorithmConfig
4949
[ApplyPolicy]
5050
public Type ValidationAlgorithmType { get; set; } = typeof(HMACSHA256);
5151

52+
/// <inheritdoc />
5253
public override IAuthenticatedEncryptorDescriptor CreateNewDescriptor()
5354
{
5455
var internalConfiguration = (IInternalAlgorithmConfiguration)this;

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/ManagedAuthenticatedEncryptorDescriptor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ namespace Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.Configurat
1313
/// </summary>
1414
public sealed class ManagedAuthenticatedEncryptorDescriptor : IAuthenticatedEncryptorDescriptor
1515
{
16+
/// <summary>
17+
/// Initializes a new instance of <see cref="ManagedAuthenticatedEncryptorDescriptor"/>.
18+
/// </summary>
19+
/// <param name="configuration">The <see cref="ManagedAuthenticatedEncryptorConfiguration"/>.</param>
20+
/// <param name="masterKey">The master key.</param>
1621
public ManagedAuthenticatedEncryptorDescriptor(ManagedAuthenticatedEncryptorConfiguration configuration, ISecret masterKey)
1722
{
1823
if (configuration == null)
@@ -33,6 +38,7 @@ public ManagedAuthenticatedEncryptorDescriptor(ManagedAuthenticatedEncryptorConf
3338

3439
internal ManagedAuthenticatedEncryptorConfiguration Configuration { get; }
3540

41+
/// <inheritdoc />
3642
public XmlSerializedDescriptorInfo ExportToXml()
3743
{
3844
// <descriptor>

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ConfigurationModel/XmlExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
namespace Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel
88
{
9+
/// <summary>
10+
/// Data protection extensions for <see cref="XElement"/>.
11+
/// </summary>
912
public static class XmlExtensions
1013
{
1114
internal static bool IsMarkedAsRequiringEncryption(this XElement element)

src/DataProtection/DataProtection/src/AuthenticatedEncryption/IAuthenticatedEncryptorFactory.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
namespace Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption
88
{
9+
/// <summary>
10+
/// A factory to produce <see cref="IAuthenticatedEncryptor"/> instances.
11+
/// </summary>
912
public interface IAuthenticatedEncryptorFactory
1013
{
1114
/// <summary>

src/DataProtection/DataProtection/src/AuthenticatedEncryption/ManagedAuthenticatedEncryptorFactory.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,19 @@ public sealed class ManagedAuthenticatedEncryptorFactory : IAuthenticatedEncrypt
1919
{
2020
private readonly ILogger _logger;
2121

22+
/// <summary>
23+
/// Initializes a new instance of <see cref="ManagedAuthenticatedEncryptorFactory"/>.
24+
/// </summary>
25+
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
2226
public ManagedAuthenticatedEncryptorFactory(ILoggerFactory loggerFactory)
2327
{
2428
_logger = loggerFactory.CreateLogger<ManagedAuthenticatedEncryptorFactory>();
2529
}
2630

31+
/// <inheritdoc />
2732
public IAuthenticatedEncryptor? CreateEncryptorInstance(IKey key)
2833
{
29-
var descriptor = key.Descriptor as ManagedAuthenticatedEncryptorDescriptor;
30-
if (descriptor == null)
34+
if (key.Descriptor is not ManagedAuthenticatedEncryptorDescriptor descriptor)
3135
{
3236
return null;
3337
}

src/DataProtection/DataProtection/src/DataProtectionUtilityExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
namespace Microsoft.AspNetCore.DataProtection
1010
{
11+
/// <summary>
12+
/// Data protection extensions for <see cref="IServiceProvider"/>.
13+
/// </summary>
1114
public static class DataProtectionUtilityExtensions
1215
{
1316
/// <summary>

src/DataProtection/DataProtection/src/EphemeralDataProtectionProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public EphemeralDataProtectionProvider(ILoggerFactory loggerFactory)
6262
_dataProtectionProvider = new KeyRingBasedDataProtectionProvider(keyringProvider, loggerFactory);
6363
}
6464

65+
/// <inheritdoc />
6566
public IDataProtector CreateProtector(string purpose)
6667
{
6768
if (purpose == null)

src/DataProtection/DataProtection/src/KeyManagement/Internal/ICacheableKeyRingProvider.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ namespace Microsoft.AspNetCore.DataProtection.KeyManagement.Internal
1111
/// </summary>
1212
public interface ICacheableKeyRingProvider
1313
{
14+
/// <summary>
15+
/// This API supports infrastructure and is not intended to be used
16+
/// directly from your code. This API may change or be removed in future releases.
17+
/// </summary>
1418
CacheableKeyRing GetCacheableKeyRing(DateTimeOffset now);
1519
}
1620
}

src/DataProtection/DataProtection/src/KeyManagement/Internal/IInternalXmlKeyManager.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,22 @@ namespace Microsoft.AspNetCore.DataProtection.KeyManagement.Internal
1313
/// </summary>
1414
public interface IInternalXmlKeyManager
1515
{
16+
/// <summary>
17+
/// This API supports infrastructure and is not intended to be used
18+
/// directly from your code. This API may change or be removed in future releases.
19+
/// </summary>
1620
IKey CreateNewKey(Guid keyId, DateTimeOffset creationDate, DateTimeOffset activationDate, DateTimeOffset expirationDate);
1721

22+
/// <summary>
23+
/// This API supports infrastructure and is not intended to be used
24+
/// directly from your code. This API may change or be removed in future releases.
25+
/// </summary>
1826
IAuthenticatedEncryptorDescriptor DeserializeDescriptorFromKeyElement(XElement keyElement);
1927

28+
/// <summary>
29+
/// This API supports infrastructure and is not intended to be used
30+
/// directly from your code. This API may change or be removed in future releases.
31+
/// </summary>
2032
void RevokeSingleKey(Guid keyId, DateTimeOffset revocationDate, string? reason);
2133
}
2234
}

src/DataProtection/DataProtection/src/KeyManagement/Internal/IKeyRingProvider.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ namespace Microsoft.AspNetCore.DataProtection.KeyManagement.Internal
99
/// </summary>
1010
public interface IKeyRingProvider
1111
{
12+
/// <summary>
13+
/// This API supports infrastructure and is not intended to be used
14+
/// directly from your code. This API may change or be removed in future releases.
15+
/// </summary>
1216
IKeyRing GetCurrentKeyRing();
1317
}
1418
}

src/DataProtection/DataProtection/src/KeyManagement/KeyManagementOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ public class KeyManagementOptions
2020
private static readonly TimeSpan _maxServerClockSkew = TimeSpan.FromMinutes(5);
2121
private TimeSpan _newKeyLifetime = TimeSpan.FromDays(90);
2222

23+
/// <summary>
24+
/// Initializes a new instance of <see cref="KeyManagementOptions"/>.
25+
/// </summary>
2326
public KeyManagementOptions()
2427
{
2528
}

src/DataProtection/DataProtection/src/KeyManagement/XmlKeyManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ internal XmlKeyManager(
136136

137137
internal IXmlRepository KeyRepository { get; }
138138

139+
/// <inheritdoc />
139140
public IKey CreateNewKey(DateTimeOffset activationDate, DateTimeOffset expirationDate)
140141
{
141142
return _internalKeyManager.CreateNewKey(
@@ -151,6 +152,7 @@ private static string DateTimeOffsetToFilenameSafeString(DateTimeOffset dateTime
151152
return dateTime.UtcDateTime.ToString("yyyyMMddTHHmmssFFFFFFFZ", CultureInfo.InvariantCulture);
152153
}
153154

155+
/// <inheritdoc/>
154156
public IReadOnlyCollection<IKey> GetAllKeys()
155157
{
156158
var allElements = KeyRepository.GetAllElements();
@@ -245,6 +247,7 @@ public IReadOnlyCollection<IKey> GetAllKeys()
245247
return keyIdToKeyMap.Values.ToList().AsReadOnly();
246248
}
247249

250+
/// <inheritdoc/>
248251
public CancellationToken GetCacheExpirationToken()
249252
{
250253
Debug.Assert(_cacheExpirationTokenSource != null, $"{nameof(TriggerAndResetCacheExpirationToken)} must have been called first.");
@@ -316,6 +319,7 @@ private object ProcessRevocationElement(XElement revocationElement)
316319
}
317320
}
318321

322+
/// <inheritdoc/>
319323
public void RevokeAllKeys(DateTimeOffset revocationDate, string? reason = null)
320324
{
321325
// <revocation version="1">
@@ -341,6 +345,7 @@ public void RevokeAllKeys(DateTimeOffset revocationDate, string? reason = null)
341345
TriggerAndResetCacheExpirationToken();
342346
}
343347

348+
/// <inheritdoc/>
344349
public void RevokeKey(Guid keyId, string? reason = null)
345350
{
346351
_internalKeyManager.RevokeSingleKey(

src/DataProtection/DataProtection/src/Microsoft.AspNetCore.DataProtection.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<Description>ASP.NET Core logic to protect and unprotect data, similar to DPAPI.</Description>
55
<TargetFrameworks>$(DefaultNetFxTargetFramework);netstandard2.0;$(DefaultNetCoreTargetFramework)</TargetFrameworks>
66
<TargetFrameworks Condition="'$(DotNetBuildFromSource)' == 'true'">$(DefaultNetCoreTargetFramework)</TargetFrameworks>
77
<IsAspNetCoreApp>true</IsAspNetCoreApp>
8-
<NoWarn>$(NoWarn);CS1591</NoWarn>
98
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
109
<GenerateDocumentationFile>true</GenerateDocumentationFile>
1110
<PackageTags>aspnetcore;dataprotection</PackageTags>

src/DataProtection/DataProtection/src/Repositories/FileSystemXmlRepository.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public FileSystemXmlRepository(DirectoryInfo directory, ILoggerFactory loggerFac
6262
/// </summary>
6363
public DirectoryInfo Directory { get; }
6464

65+
/// <inheritdoc/>
6566
public virtual IReadOnlyCollection<XElement> GetAllElements()
6667
{
6768
// forces complete enumeration
@@ -105,6 +106,7 @@ private XElement ReadElementFromFile(string fullPath)
105106
}
106107
}
107108

109+
/// <inheritdoc/>
108110
public virtual void StoreElement(XElement element, string friendlyName)
109111
{
110112
if (element == null)

src/DataProtection/DataProtection/src/Repositories/RegistryXmlRepository.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public RegistryXmlRepository(RegistryKey registryKey, ILoggerFactory loggerFacto
5454
/// </summary>
5555
public RegistryKey RegistryKey { get; }
5656

57+
/// <inheritdoc/>
5758
public virtual IReadOnlyCollection<XElement> GetAllElements()
5859
{
5960
// forces complete enumeration
@@ -133,6 +134,7 @@ private static bool IsSafeRegistryValueName(string filename)
133134
return (!string.IsNullOrEmpty(data)) ? XElement.Parse(data) : null;
134135
}
135136

137+
/// <inheritdoc/>
136138
public virtual void StoreElement(XElement element, string friendlyName)
137139
{
138140
if (element == null)

0 commit comments

Comments
 (0)