В настоящее время я пытаюсь прочитать информацию об объекте из файла web.config и создать объект на основе этого.Однако я только хочу иметь возможность создавать объекты из классов, которые расширяют определенный интерфейс (IModule
).Тип объекта исходит из атрибута типа в web.config:
<module moduleAlias="Test" type="ASPNETMVCMODULES.TestModule" connectionStringName="ApplicationServices">
<properties>
<property name="prop1" value="abc" type="System.String"/>
<property name="prop2" value="123" type="System.Int32"/>
</properties>
</module>
В моем коде ASPNETMVCMODULES.TestModule
фактически расширяет IModule
, и он прекрасно загружается скод ниже:
Проблема, с которой я столкнулся, заключается в том, что, поскольку я определяю каждый объект как IModule
, я не могу получить доступ к каким-либо дополнительным методам или свойствам, добавляемым в расширяющий класс.Есть ли способ для меня создать объект с его собственным типом, обеспечивая при этом расширение IModule
?Возможно, стоит использовать System.Convert
, чтобы преобразовать из IModule
в TestModule
(в данном случае)?
В идеале, я бы хотел иметь возможность определить объект, используя modT
, который является типомобъект прямо из web.config.
public void LoadModules()
{
ASPNETMVCMODULES.Configuration.ModulesSection allModules = (ASPNETMVCMODULES.Configuration.ModulesSection)System.Web.Configuration.WebConfigurationManager.GetSection("mvcmodules");
foreach (Configuration.Module mod in allModules.Modules)
{
Type modT = Type.GetType(mod.ModuleType);
IModule ob = (IModule)Activator.CreateInstance(modT);
foreach (ASPNETMVCMODULES.Configuration.ModuleProperty modP in mod.ModuleProperties)
{
object origVal = modP.Value;
object newVal = Convert.ChangeType(origVal, Type.GetType(modP.PropertyTypeString));
ob.Properties.Add(modP.Name, newVal);
}
//Have to add some properties manually
ob.Properties.Add("ConnectionString", (string)mod.ConnectionString);
//RegisterModule(string, IModule)
RegisterModule(mod.ModuleAlias, ob);
}
}
Спасибо