diff --git a/Directory.Packages.props b/Directory.Packages.props
index f37bd594e4c..8d1be8d06bb 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -19,6 +19,7 @@
+
diff --git a/eng/Versions.props b/eng/Versions.props
index 9c269f28cfe..fdfd3488d86 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -86,6 +86,7 @@
$(MicrosoftExtensionsLogging80Version)
$(MicrosoftExtensionsLoggingAbstractions80Version)
$(MicrosoftExtensionsLoggingConsole80Version)
+ $(MicrosoftExtensionsOptions80Version)
$(SystemTextJson80Version)
@@ -95,6 +96,7 @@
$(MicrosoftExtensionsLogging90Version)
$(MicrosoftExtensionsLoggingAbstractions90Version)
$(MicrosoftExtensionsLoggingConsole90Version)
+ $(MicrosoftExtensionsOptions90Version)
$(SystemTextJson90Version)
$(MicrosoftAspNetCoreApp90Version)
@@ -105,6 +107,7 @@
$(MicrosoftNETCoreApp100Version)
$(MicrosoftNETCoreApp100Version)
$(MicrosoftNETCoreApp100Version)
+ $(MicrosoftNETCoreApp100Version)
$(MicrosoftNETCoreApp100Version)
$(MicrosoftAspNetCoreApp100Version)
diff --git a/eng/dependabot/net8.0/Packages.props b/eng/dependabot/net8.0/Packages.props
index 039efe2cfb3..fc6c4e5c1e0 100644
--- a/eng/dependabot/net8.0/Packages.props
+++ b/eng/dependabot/net8.0/Packages.props
@@ -7,6 +7,7 @@
+
8.0.1
+
+ 8.0.2
8.0.15
diff --git a/eng/dependabot/net9.0/Versions.props b/eng/dependabot/net9.0/Versions.props
index 8a7dfb77b34..5fc5de53c00 100644
--- a/eng/dependabot/net9.0/Versions.props
+++ b/eng/dependabot/net9.0/Versions.props
@@ -9,6 +9,8 @@
9.0.4
9.0.4
+
+ 9.0.4
9.0.4
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
index b75f72b30b1..8a8355ce625 100644
--- a/src/Directory.Build.targets
+++ b/src/Directory.Build.targets
@@ -126,4 +126,14 @@
+
+
+
+
+
+
+
diff --git a/src/Microsoft.Diagnostics.Monitoring.Extension.Common/EgressHelper.cs b/src/Microsoft.Diagnostics.Monitoring.Extension.Common/EgressHelper.cs
index 1136a5e4b3c..a00d0c0d30e 100644
--- a/src/Microsoft.Diagnostics.Monitoring.Extension.Common/EgressHelper.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.Extension.Common/EgressHelper.cs
@@ -190,7 +190,6 @@ private static ServiceCollection CreateServices(ExtensionEgressPayload
.Build()
.Bind(options);
});
- services.AddSingleton, DataAnnotationValidateOptions>();
services.AddSingleton(new EgressProperties(payload.Properties));
diff --git a/src/Microsoft.Diagnostics.Monitoring.Extension.Common/Microsoft.Diagnostics.Monitoring.Extension.Common.csproj b/src/Microsoft.Diagnostics.Monitoring.Extension.Common/Microsoft.Diagnostics.Monitoring.Extension.Common.csproj
index 8879d6f8eb6..8c5c54fd3a7 100644
--- a/src/Microsoft.Diagnostics.Monitoring.Extension.Common/Microsoft.Diagnostics.Monitoring.Extension.Common.csproj
+++ b/src/Microsoft.Diagnostics.Monitoring.Extension.Common/Microsoft.Diagnostics.Monitoring.Extension.Common.csproj
@@ -9,10 +9,6 @@
true
-
-
-
-
diff --git a/src/Microsoft.Diagnostics.Monitoring.Options/GlobalCounterOptions.cs b/src/Microsoft.Diagnostics.Monitoring.Options/GlobalCounterOptions.cs
index c360b5184d1..fc396a75c70 100644
--- a/src/Microsoft.Diagnostics.Monitoring.Options/GlobalCounterOptions.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.Options/GlobalCounterOptions.cs
@@ -7,6 +7,8 @@
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
namespace Microsoft.Diagnostics.Monitoring.WebApi
{
@@ -52,19 +54,19 @@ partial class GlobalCounterOptions : IValidatableObject
{
public IEnumerable Validate(ValidationContext validationContext)
{
+ var providerValidator = validationContext.GetRequiredService>();
var results = new List();
if (Providers != null)
{
- var providerResults = new List();
foreach ((string provider, GlobalProviderOptions options) in Providers)
{
- providerResults.Clear();
- if (!Validator.TryValidateObject(options, new ValidationContext(options), providerResults, true))
+ ValidateOptionsResult providerResults = providerValidator.Validate(provider, options);
+ if (providerResults.Failed)
{
// We prefix the validation error with the provider.
- results.AddRange(providerResults.Select(r => new ValidationResult(
- string.Format(CultureInfo.CurrentCulture, OptionsDisplayStrings.ErrorMessage_NestedProviderValidationError, provider, r.ErrorMessage))));
+ results.AddRange(providerResults.Failures.Select(r => new ValidationResult(
+ string.Format(CultureInfo.CurrentCulture, OptionsDisplayStrings.ErrorMessage_NestedProviderValidationError, provider, r))));
}
}
}
diff --git a/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptions.cs b/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptions.cs
index faa647690f3..7d7b5a9e9d7 100644
--- a/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptions.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptions.cs
@@ -1,6 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -43,6 +44,7 @@ public class MetricsOptions
[Display(
ResourceType = typeof(OptionsDisplayStrings),
Description = nameof(OptionsDisplayStrings.DisplayAttributeDescription_MetricsOptions_Providers))]
+ [ValidateEnumeratedItems]
public List Providers { get; set; } = [];
[Display(
diff --git a/src/Microsoft.Diagnostics.Monitoring.Options/Microsoft.Diagnostics.Monitoring.Options.csproj b/src/Microsoft.Diagnostics.Monitoring.Options/Microsoft.Diagnostics.Monitoring.Options.csproj
index f11b2d63e0e..b8763eb1259 100644
--- a/src/Microsoft.Diagnostics.Monitoring.Options/Microsoft.Diagnostics.Monitoring.Options.csproj
+++ b/src/Microsoft.Diagnostics.Monitoring.Options/Microsoft.Diagnostics.Monitoring.Options.csproj
@@ -1,4 +1,4 @@
-
+