2010-07-21 59 views
1

我需要找出調用僅在運行時運行時才知道的statc方法的最佳方法。調用可配置方法的最佳方式

每個使用我的軟件的客戶都有一個返回suctom字符串的特殊方法。我正在考慮將方法名稱放在配置文件中,然後在運行時調用它。

這是一個好方法嗎?

回答

5

爲什麼不能實現給定接口的自定義類? IMO應該會更好。

你可以把完全合格的類名的配置,並通過反射實例化它:

Type t = Type.GetType(type_name_from_config); 

IGivenInterface obj = (IGivenInterface) Activator.CreateInstance(t); 
0

反射的魔力!

using System.Reflection; 

var type = typeof(YourStaticClass); 
var customstring = type.InvokeMember 
(
    "methodname", 
    BindingFlags.InvokeMethod, 
    Type.DefaultBinder, 
    null, 
    null 
); 

這樣,您可以將方法名稱作爲簡單字符串存儲在首選用戶存儲中。如果它是一個ASP.NET站點,則可以使用用戶配置文件,或者使用獨立存儲或某些用戶範圍的應用程序設置。

1

如果每個客戶的需求提供一個字符串,它不是一成不變的,需要在運行時進行計算,然後一個很好的解決辦法是定義一個接口如:

public interface ICustomerInfo 
{ 
    string CustomerStringValue { get; } 
} 

,然後要求每個客戶提供寫一個實現這個接口的類。

在運行時動態發現並加載這些類的一個好方法是使用.NET託管的可擴展性框架(僅在.NET 4.0中)。使用MEF,您可以自動發現包含實現給定接口的類型的特定目錄中的程序集。你可以使用'Import'屬性,讓MEF在運行時動態激活這些類型的實例,並將引用注入到對象中。

你可以找到更多關於MEF here的信息。