我有以下课程:
public Employee : IPerson
{
public string Name { get; set; }
}
public Manager : IPerson
{
public string Name { get; set; }
}
在运行时,我可能需要:
var person = new Manager();
或可能:
var person = new Employee();
然后:
string name = person.Name;
在某个时候。我目前正在使用Activator.CreateInstance(),但是想知道是否错误地接近了这个问题?类的类型是在运行时决定的,所以没有高级注意事项。
我希望避免像:
string externalValue;
var person;
switch (externalValue)
{
case "Manager":
person = new Manager();
break;
case "Employee":
person = new Employee();
break;
}
答案 0 :(得分:1)
您可以使用Dictionary<string, Func<IPerson>>
,初始化一次,然后使用创建正确的实例:
private Dictionary<string, Func<IPerson>> _initializers = new Dictionary<string, Func<IPerson>>() {
{ "Manager", () => new Manager() },
{ "Employee", () => new Employee() }
}
string externalValue;
var person = _initializers[externalValue]();
答案 1 :(得分:1)
看起来您正在尝试创建依赖注入(DI)系统。
依赖注入是一种软件设计模式,允许删除硬编码的依赖项,并且可以在运行时或编译时更改它们
http://en.wikipedia.org/wiki/Dependency_injection
我建议您查看现有的DI系统,而不是重新发明轮子。有关概述,请查看