Другой подход, но, возможно, уберите его из атрибута, возможно, используя статическое событие в качестве хука API?затем вы можете поместить словарь куда угодно ?
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class FeatureFlagAttribute : ActionFilterAttribute
{
public FeatureFlagAttribute(string featureName)
{
selectedFeature = featureName;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
if (IsActive?.Invoke(selectedFeature) == false)
{
// dont continue
context.HttpContext.Response.StatusCode = 403;
}
}
public static event Func<string, bool> IsActive;
}
(обратите внимание, что вам нужно быть осторожным со статическими событиями, чтобы не вызвать утечки памяти)
В качестве альтернативы, сохраните то, что у вас есть, но сделайте словарь статичным (и защищенным от потоков и т. Д.);затем добавьте некоторый API, например:
public static void SetFeatureEnabled(string featureName, bool enabled);
, который настраивает статический словарь.