调用可配置方法的最佳方法

时间:2010-07-21 10:37:47

标签: c# configuration

我需要找出调用statc方法的最佳方法,我只在运行时在运行时知道。

每个使用我软件的客户都有一个返回suctom字符串的特殊方法。我想将方法​​名称放在配置文件中,然后在运行时调用它。

这是一个好方法吗?

3 个答案:

答案 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站点,您可以使用用户配置文件,或者使用独立存储或某些用户范围的应用程序设置。