基本上我想要的介于FormatterServices.GetUninitializedObject()
和之间Activator.CreateInstance()
。
这是针对插件类型的系统,因此类型是可变的,但我不认为这是一个问题,因为上述两种处理变量类型都很好。
基本上,我想创建插件类的一个实例,用它们定义的值初始化所有字段和属性,但推迟调用构造函数,直到我的父应用程序查看它是否有任何要注入的配置设置。
IInputDeviceEnumerator newEnum = (IInputDeviceEnumerator)FormatterServices.GetUninitializedObject(type);
if (newEnum is IIMConfigurable typeSettings)
{
string pluginDirectory = Path.GetDirectoryName(new System.Uri(typeSettings.GetType().Assembly.CodeBase).AbsolutePath);
string pluginConfigPath = Path.Combine(pluginDirectory, "settings.json");
if (File.Exists(pluginConfigPath))
{
try
{
JsonConvert.PopulateObject(File.ReadAllText(pluginConfigPath), typeSettings.config);
}
catch { }
}
SharedProperties.Settings.pluginSettings.settingsGroups.Add(typeSettings.config);
}
var constructor = type.GetConstructor(Type.EmptyTypes);
constructor.Invoke(newEnum, null);
我感觉答案在某处PopulateObjectMembers
,但我还没有找到足够的信息来决定。