Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “加载后编译”的编程模式;“对象”;在c中#_C#_.net_Design Patterns - Fatal编程技术网

C# “加载后编译”的编程模式;“对象”;在c中#

C# “加载后编译”的编程模式;“对象”;在c中#,c#,.net,design-patterns,C#,.net,Design Patterns,这并不是一个正确或错误的答案,我只是在寻找想法、观点或其他经验 我想用c#做这件事。网络核心 这并不完全是我想做的,但它是一个更好的例子,我可以从中推断 假设我想编写一个简单的控制台应用程序来解压缩文件 注意:这比我真正的程序要简单得多 main { switch(algo) { case "zip": zip(); case "rar": rar(); } byte[] zip()

这并不是一个正确或错误的答案,我只是在寻找想法、观点或其他经验

我想用c#做这件事。网络核心

这并不完全是我想做的,但它是一个更好的例子,我可以从中推断

假设我想编写一个简单的控制台应用程序来解压缩文件

注意:这比我真正的程序要简单得多

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 .....