我需要找出调用statc方法的最佳方法,我只在运行时在运行时知道。
每个使用我软件的客户都有一个返回suctom字符串的特殊方法。我想将方法名称放在配置文件中,然后在运行时调用它。
这是一个好方法吗?
答案 0 :(得分:5)
为什么不是实现给定接口的自定义类?它应该更好,IMO。
您可以将完全限定的类名放在配置中,并通过反射实例化它:
Type t = Type.GetType(type_name_from_config);
IGivenInterface obj = (IGivenInterface) Activator.CreateInstance(t);
答案 1 :(得分:1)
如果每个客户都需要提供非静态字符串并且需要在运行时计算,那么一个好的解决方案就是定义一个接口,例如:
public interface ICustomerInfo
{
string CustomerStringValue { get; }
}
然后要求每个客户提供一个实现此接口的类。
在运行时动态发现和加载这些类的一种好方法是使用.NET托管扩展性框架(仅在.NET 4.0中)。使用MEF,您可以自动发现某个目录中包含实现给定接口的类型的程序集。您可以使用“导入”属性并让MEF在运行时动态激活这些类型的实例,并将对它们的引用注入到您的对象中。
您可以找到有关MEF here的更多信息。
答案 2 :(得分:0)
反思的魔力!
using System.Reflection;
var type = typeof(YourStaticClass);
var customstring = type.InvokeMember
(
"methodname",
BindingFlags.InvokeMethod,
Type.DefaultBinder,
null,
null
);
这样,您可以将方法名称作为简单字符串存储在首选用户存储中。如果它是ASP.NET站点,您可以使用用户配置文件,或者使用独立存储或某些用户范围的应用程序设置。