gpt4 book ai didi

c# - 如何在 C# 中为插件函数指定默认值

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:05 25 4
gpt4 key购买 nike

我正在尝试实现一个简单的插件系统,它允许人们编写以下内容:

[Plugin("A plugin function")]
public static int PluginFunction(int a, int b)
{
return a + b;
}

然后将包含此函数的 DLL 放到一个文件夹中,应用程序将在该文件夹中扫描它并在运行时显示为可用函数。这一切都很好,到目前为止一切顺利,PluginAttribute 类是您所期望的,只是函数的描述字符串。

但是,我希望允许插件编写者为参数指定默认值。这对于在编译时是常量然后通过反射推导的值是可以的,但我想要一种方法来指定将在运行时创建的更复杂类型的默认值。有没有人实现过类似的东西?主要目标是使实现插件功能变得简单——我试图避免复杂的脚手架,但接受我的好简单系统不会削减它,如果我想要这个功能。我也很高兴在应用程序代码中有一些复杂性,这使得系统对插件编写者来说看起来很简单。

谢谢,查理。


更新:

我将结合这里的建议,最接近的是 Peter O. 提出的 - 这是一个版本:

[Plugin("A plugin function")]
[Defaults(typeof(AdderDefaults))]
public static int Adder(int a, int b)
{
return a + b;
}

public static class AdderDefaults
{
public static int a { get { return 1; } }
public static int b { get { return 2; } }
}

[Plugin("Another plugin function")]
[Defaults(typeof(TexturizerDefaults))]
public static Bitmap Texturize(Bitmap source, Point offset)
{
return result;
}

public static class TexturizerDefaults
{
// no default for source parameter
public static Point offset { get { return new Point(16, 16); } }
}

这允许跳过参数并按名称指定。没有编译时检查,但没关系 - 在运行时检查这些是可以接受的。

最佳答案

也许你可以创建一个引用类型的属性包含插件的默认值。示例:

[PluginDefaults(typeof(MyPluginDefaults))]

MyPluginDefaults 类可能如下所示:

public class MyPluginDefaults {
int Parameter1 { // First parameter
get { return 0; } // default value for 'a'
}
int Parameter2 { // Second parameter
get { return 4; } // default value for 'b'
}
// Additional parameters would be called Parameter3, Parameter4, and so on.

}

关于c# - 如何在 C# 中为插件函数指定默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8197438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com