c# - 在C#winforms中通过动态代码执行不同namspace的方法

标签 c# namespaces dynamic-code

我正在 C# 中实现动态代码执行,它允许用户为该特定应用程序编写自己的 C#。

我正在使用 C# 代码编译器来执行动态代码。 C#编译器读取代码文件并在新的命名空间(一个完整的新代码)中构造代码,编译并运行它。在其他 View 中,基本应用程序托管所有这些。

我希望由动态代码执行的主机应用程序中存在的方法很少。有什么方法可以执行其他命名空间或应用程序的方法吗?

最佳答案

你能强制你的脚本作者实现一个接口(interface),或者你甚至可以用你自己的实现包装他们的代码..

就像是

public interface IMyApplication
{
      void DoSomethingInMyMainApp();
}
public interface IScriptKiddie
{
      void Init(IMyApplication app);
}

然后你的 l33t 脚本编写者可以写
public class MyScript : IScriptKiddie //< you could emit this yourself
{

     public void Init(IMyApplication app) //<could emit this yourself if scripter knows app keyword
     {
          app.DoSomethingInMyMainApp();
     }
}

并且在您的应用程序中,您可以提供 IMyApplication 的具体实现,以便在编译、构造类然后传递到 Init 方法时传递到类中。

关于c# - 在C#winforms中通过动态代码执行不同namspace的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4498827/

相关文章:

asp.net - 使用默认命名空间的 HttpHandler

嵌入式系统上的 C++ 动态代码注入(inject)

java-compiler-api - 支持泛型的 Java 动态代码生成

import - 我无法在 clojure/midje 中运行测试

c# - 为 Asp.net 中的项目推荐一个在线存储库和项目管理工具

c# - ExtractExistingFileAction.OverwriteSilently 不会覆盖给定目录中的文件

c# - 对 yield 返回和从 foreach 中断的担忧

web - 网站中的默认命名空间

objective-c - 使用动态代码枚举 NSArray 的 block 闭包和三元运算符

c# - 温莎城堡 : inject IEnumerable<IService> using only a subset of registered components for IService