MicroKernel 內建 TypeConverter 自動處理基本型別,配置時無需指定型別:
<component id="MyComponent">
<parameters>
<port>10</port> <!-- int -->
<server>mail.host.com</server> <!-- string -->
<threshold>13.22</threshold> <!-- double -->
<enabled>true</enabled> <!-- bool -->
<initial>2024-01-01</initial> <!-- DateTime -->
<type>MyApp.Comp, MyApp</type> <!-- Type -->
</parameters>
</component>
<component id="e" type="CastleDemo.MyComponent,CastleDemo">
<parameters>
<Orders>
<item type="System.Int32">
<item>1</item><item>2</item><item>3</item>
</item>
</Orders>
</parameters>
</component>
<component id="mycomponent" type="CastleDemo.MyComponent,CastleDemo">
<parameters>
<hosts>
<list type="System.String">
<item>server1</item><item>server2</item><item>server3</item><item>server4</item>
</list>
</hosts>
</parameters>
</component>
<component id="MyComponent" type="CastleDemo.MyComponent,CastleDemo">
<parameters>
<d>
<dictionary>
<entry key="a">a</entry><entry key="b">b</entry><entry key="c">c</entry>
</dictionary>
</d>
</parameters>
</component>
或指定 Key/Value 型別:
<dictionary keyType="System.String, mscorlib" valueType="System.String, mscorlib">...</dictionary>

PrimitiveConverter:基本型別TypeNameConverter:型別名稱 → TypeEnumConverter:列舉ListConverter:IListDictionaryConverter:IDictionaryArrayConverter:Arraypublic class PrimitiveConverter : AbstractTypeConverter
{
private readonly Type[] _types = { typeof(char), typeof(DateTime), typeof(decimal), typeof(bool),
typeof(short), typeof(int), typeof(long), typeof(ushort), typeof(uint), typeof(ulong),
typeof(byte), typeof(sbyte), typeof(float), typeof(double), typeof(string) };
public override bool CanHandleType(Type type) => Array.IndexOf(_types, type) != -1;
public override object PerformConversion(string value, Type targetType)
{
if (targetType == typeof(string)) return value;
try { return Convert.ChangeType(value, targetType); }
catch (Exception ex)
{
throw new ConverterException($"Could not convert from '{value}' to {targetType.FullName}", ex);
}
}
public override object PerformConversion(IConfiguration config, Type targetType)
=> PerformConversion(config.Value, targetType);
}
ITypeConverter:public class MyTypeConverter : ITypeConverter { ... }ConversionManager:
IKernel kernel = new DefaultKernel();
var conversionMgr = (IConversionManager)kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey);
conversionMgr.Add(new MyTypeConverter());