我正在使用功能标志在不同的环境中选择性地启用/禁用我的 MVC4 Web 应用程序的某些方面。我有一个以提供对这些标志的访问IConfiguration
的方法命名的接口。IsEnabled(FeatureFlag)
为此,我想在它们相关的功能关闭时禁用某些 MVC 操作方法。我有一个名为的属性FeatureAttribute
定义如下:
// Usage: [Feature(FeatureFlag.I18N)]
public class FeatureAttribute : ActionMethodSelectorAttribute {
private IConfiguration _config;
private FeatureFlag _feature;
public FeatureAttribute(FeatureFlag feature) {
_config = DependencyResolver.Current.GetService<IConfiguration>();
_feature = feature;
}
public override bool IsValidForRequest(ControllerContext controllerContext,
MethodInfo methodInfo) {
return _config.IsEnabled(_feature);
}
}
这行得通,但DependencyResolver
用来获得一个IConfiguration
有趣的气味的实例。有什么办法可以重新设计我的代码以避免服务定位器模式?
我最初想到使用过滤器注入,但ActionMethodSelectorAttribute
实际上不是过滤器,所以它不适用于这里。