0

特定の形式のファイルを読み取ってビジネス オブジェクトに変換する C# のコンソール アプリがある場合、XML、CSV、パイプ区切りなどのさまざまな形式をサポートできるように、IReader インターフェイスを使用してこれを設計し、ファイル形式ごとに異なる具象クラス。

再コンパイルせずに新しいファイル リーダー (新しい形式) を動的にロードできるようにする必要がある場合、それを達成する方法はありますか?

私が考えることができる唯一の方法は、どういうわけかXSDまたはreg式を使用することですが、より良い解決策があるはずです

4

3 に答える 3

0

これは、IReaders を動的にロードするためのプラグイン メカニズムが必要なようです。そこにはたくさんの例があります。

シンプルなプラグイン機構のサンプル

そう議論

于 2013-10-10T13:49:44.503 に答える
0

読者の共謀次第で、CodeDom誰かに直接コードを書かせるために使用することもできます。短い例:

            // create compiler
            CodeDomProvider provider = CSharpCodeProvider.CreateProvider("C#");
            CompilerParameters options = new CompilerParameters();
            // add more references if needed
            options.ReferencedAssemblies.Add("system.dll");
            options.GenerateExecutable = false;
            options.GenerateInMemory = true;
            // compile the code
            string source = "using System;namespace Bla {public class Blabla { public static bool Test { return false; }}}";
            CompilerResults result = provider.CompileAssemblyFromSource(options, source);
            if (!result.Errors.HasErrors)
            {
                Assembly assembly = result.CompiledAssembly;
                // instance can be saved and then reused whenever you need to run the code
                var instance = assembly.CreateInstance("Bla.Blabla");
                // running some method
                MethodInfo method = instance.GetType().GetMethod("Test"));
                var result = (bool)method.Invoke(_formulas, new object[] {});
            }

しかしおそらく、ある種のエディターを提供するか、タスクを部分的に実行する必要があります (そのため、必要なコードのみを作成する必要があります)。

于 2013-10-10T14:28:33.370 に答える