我无法从Unity传递枚举值。这是我的枚举
public enum MyChoice
{
Choice1 = 1,
Choice2 = 2
}
我已为此枚举类型注册了typeAlias,如下所示。
<typeAlias alias ="MyChoice" type ="SomeNamespace.MyChoice, SomeAssembly" />
到目前为止一切顺利。现在,我需要从配置文件中将枚举值传递给类的构造函数。我这样做:
<register type="IMyInterface" mapTo="SomeClass" name="MyClass">
<constructor>
<param name ="choice" value="MyChoice.Choice1" />
</constructor>
</register>
我收到错误MyChoice.Choice1不是MyChoice的有效值
有什么想法吗?
答案 0 :(得分:2)
要使它开箱即用,您应该使用枚举的实际值而不是名称。在这种情况下,而不是&#34; MyChoice.Choice1&#34;你应该使用&#34; 1&#34;。
如果你想在配置中使用这个名字(尽管发布的例子,使用枚举名称几乎总是更有意义),那么你可以使用类型转换器。
以下是配置示例:
<typeAlias alias ="EnumConverter" type ="SomeNamespace.EnumConverter`1, SomeAssembly" />
<register type="IMyInterface" mapTo="SomeClass" name="MyClass">
<constructor>
<param name ="choice" value="Choice1" typeConverter="EnumConverter[MyChoice]" />
</constructor>
</register>
然后创建EnumConverter:
public class EnumConverter<T> : System.ComponentModel.TypeConverter where T : struct
{
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
T result;
if (value == null || !Enum.TryParse<T>(value.ToString(), out result))
{
throw new NotSupportedException();
}
return result;
}
}