[英]Access class property at run-time based on dynamic instantiation
我有以下課程:
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;
}
您可以使用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]();
看來您正在嘗試創建依賴關系注入(DI)系統。
依賴項注入是一種軟件設計模式,它允許刪除硬編碼的依賴項,並可以在運行時或編譯時更改它們
http://en.wikipedia.org/wiki/Dependency_injection
建議您不要研究現有的DI系統,而不是重新發明輪子。 對於一個很好的概述,看看
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.