【发布时间】:2010-11-17 12:46:09
【问题描述】:
我目前正在做一个项目,我需要在运行时根据配置文件创建对象。
项目示例
这是我正在进行的项目的简化示例。
创建的每个对象都必须实现一个特定的接口,为了示例目的,我们将其称为IObjectInterface:
public interface IObjectInterface
{
void DoSomething();
}
假设我有几个实现这个接口的类,每个类都有一个特定的实现,以及与特定类型相关的多个其他属性:
public class SimpleObject : IObjectInterface
{
public void DoSomething()
{
Console.WriteLine("SimpleObject did something");
}
}
public class ComplexObject : IObjectInterface
{
public string ObjectName { get; set; }
public void DoSomething()
{
Console.WriteLine("The ComplexObject named {0} did something", this.ObjectName);
}
}
public class VeryComplexObject : IObjectInterface
{
public string ObjectName { get; set; }
public bool CanDoSomething { get; set; }
public void DoSomething()
{
if (this.CanDoSomething)
{
Console.WriteLine("The ComplexObject named {0} did something", this.ObjectName);
}
else
{
Console.WriteLine("The ComplexObject named {0} tried to do something, but was not allowed to", this.ObjectName);
}
}
}
我需要能够使用 ObjectBuilder 类创建与特定 Id 对应的 IObjectInterface 对象:
public class ObjectBuilder
{
IObjectInterface BuildObject(string objectId)
{
// Build object here based on provided Id
}
}
我正在寻找的是一种在配置文件中指定应该创建的IObjectInterface 的正确实现以及与特定类型关联的参数值的方法。
理想的配置文件应该是这样的:
<objects>
<object id="Simple">
<objectInterface type="SimpleObject" />
</object>
<object id="Complex">
<objectInterface type="ComplexObject">
<ObjectName value="MyObject" />
</objectInterface>
</object>
</objects>
我认为我应该能够管理对象实例化部分,但我真的不明白如何使用干净的代码管理实例的初始化。
- 您对我如何实现这样的配置文件有一些指导吗?
- 如何轻松创建所需对象的最终实例并使用配置文件中提供的参数对其进行初始化?
- 是否有任何框架可以帮助我解决我的问题?
【问题讨论】:
-
也许您只是在寻找serialization?
-
@Vlad : 是的,序列化是我的第一个想法,但我对我的用户在编辑配置文件时必须编写“可反序列化”的 xml 感到不舒服
标签: c# configuration