如何在我的属性中设置动态值

2023-11-21

我想将动态变量作为参数传递给我的属性。这里我想使用Environment.MachineName,见下面的代码:

public interface IMonitoringViewModelConfiguration : IConfigurationContainer
{
    [ConfigurationKey("MonitoringService", Environment.MachineName)]
    string ConnectionString { get; }
}

但我收到这个错误: 错误 1 ​​属性参数必须是属性参数类型 Abc.ServiceBus.Monitoring.ViewModel 的常量表达式、typeof 表达式或数组创建表达式

是否有任何尽可能干净的解决方法来传递我的 Environment.MachineName ?

Thanks.

John

PS:我找到了一些讨论这个案例的文章,但它是2-3年前写的。但是今天,.NET 4.0 的 clr 是否给出了一些不错的解决方案?


您可以创建一个具有特殊值的枚举,并在属性中的单独构造函数重载中接受它们:

enum SpecialConfigurationValues
{
    MachineName
    // , other special ones
}

class ConfigurationKeyAttribute : Attribute
{
    private string _key;
    private string _value;

    public ConfigurationKeyAttribute(string key, string value)
    {
        // ...
    }

    public ConfigurationKeyAttribute(string key, SpecialConfigurationValues specialValue)
    {
        _key = key;
        switch (specialValue)
        {
            case SpecialConfigurationValues.MachineName:
                _value = Environment.MachineName;
                break;
            // case <other special ones>
        }
    }
}

[ConfigurationKey("MonitoringService", SpecialConfigurationValues.MachineName)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在我的属性中设置动态值 的相关文章

随机推荐