我需要找出調用僅在運行時運行時才知道的statc方法的最佳方法。調用可配置方法的最佳方式
每個使用我的軟件的客戶都有一個返回suctom字符串的特殊方法。我正在考慮將方法名稱放在配置文件中,然後在運行時調用它。
這是一個好方法嗎?
我需要找出調用僅在運行時運行時才知道的statc方法的最佳方法。調用可配置方法的最佳方式
每個使用我的軟件的客戶都有一個返回suctom字符串的特殊方法。我正在考慮將方法名稱放在配置文件中,然後在運行時調用它。
這是一個好方法嗎?
爲什麼不能實現給定接口的自定義類? IMO應該會更好。
你可以把完全合格的類名的配置,並通過反射實例化它:
Type t = Type.GetType(type_name_from_config);
IGivenInterface obj = (IGivenInterface) Activator.CreateInstance(t);
反射的魔力!
using System.Reflection;
var type = typeof(YourStaticClass);
var customstring = type.InvokeMember
(
"methodname",
BindingFlags.InvokeMethod,
Type.DefaultBinder,
null,
null
);
這樣,您可以將方法名稱作爲簡單字符串存儲在首選用戶存儲中。如果它是一個ASP.NET站點,則可以使用用戶配置文件,或者使用獨立存儲或某些用戶範圍的應用程序設置。
如果每個客戶的需求提供一個字符串,它不是一成不變的,需要在運行時進行計算,然後一個很好的解決辦法是定義一個接口如:
public interface ICustomerInfo
{
string CustomerStringValue { get; }
}
,然後要求每個客戶提供寫一個實現這個接口的類。
在運行時動態發現並加載這些類的一個好方法是使用.NET託管的可擴展性框架(僅在.NET 4.0中)。使用MEF,您可以自動發現包含實現給定接口的類型的特定目錄中的程序集。你可以使用'Import'屬性,讓MEF在運行時動態激活這些類型的實例,並將引用注入到對象中。
你可以找到更多關於MEF here的信息。