C# “加载后编译”的编程模式;“对象”;在c中#
这并不是一个正确或错误的答案,我只是在寻找想法、观点或其他经验 我想用c#做这件事。网络核心 这并不完全是我想做的,但它是一个更好的例子,我可以从中推断 假设我想编写一个简单的控制台应用程序来解压缩文件 注意:这比我真正的程序要简单得多C# “加载后编译”的编程模式;“对象”;在c中#,c#,.net,design-patterns,C#,.net,Design Patterns,这并不是一个正确或错误的答案,我只是在寻找想法、观点或其他经验 我想用c#做这件事。网络核心 这并不完全是我想做的,但它是一个更好的例子,我可以从中推断 假设我想编写一个简单的控制台应用程序来解压缩文件 注意:这比我真正的程序要简单得多 main { switch(algo) { case "zip": zip(); case "rar": rar(); } byte[] zip()
main
{
switch(algo)
{
case "zip":
zip();
case "rar":
rar();
}
byte[] zip()
{
blah;
}
etc. etc.
}
现在忽略继承/接口等。这太硬了
假设我想这样做,但是我的主控制台程序不知道它的解码是什么,它只需要相同的输入/输出方法等等
只是:
Interface Decode {...........................................
main
{
make a file whatever < byte[] Decode something thats passed to me();
}
但是想法是任何东西都可以添加到decode目录(使用相同的语言c#),它可以按照某种接口单独编译(或不编译)(像插件一样)
是否有任何特定于这种想法的模式,是否有一种简单的方法在c中实现这一点?我是否需要编写某种对象加载器
在主代码中使用继承很容易做到这一点,但插件部分很重要。在谷歌上搜索了一会儿之后,我无法用语言表达一种简单的方法来寻找想法
希望所有这些都有意义。您可以查看MEF,它非常类似于DI容器,但专门为此目的而构建。其思想是加载用特殊属性装饰的组件。很酷,我以前从未遇到过。它现在似乎为.Net核心“Microsoft Composition”起了一个新名称。您可以查看MEF,它非常类似于DI容器,但专门为此而构建。其思想是加载用特殊属性装饰的组件。很酷,我以前从未遇到过。它现在似乎有了一个新的名称,用于.Net核心“Microsoft Composition”
\MyMain.exe (arguments passed as to what to decode)
\Decoders\rardecode.dll Though note this is for .NET Core
or rardecode.obj (maybe)
or rardecode.cs(compiled as needed)
zipdecode.dll
or zipdecode.obj .....