c#从DLL扩展类



好的,这应该是一个非常简单的问题

我正在制作一个游戏引擎类型的东西,需要动态加载包含mod内容的外部dll。问题基本上是这样的:

在我的引擎中,我有以下内容:

public class Mod
{
    public abstract void OnLoad(ModLoadedArgs args);
}

如果我要在DLL中放入以下内容:

public class ContentMod : Mod
{
    public void OnLoad(ModLoadedArgs args)
    {
        BaseEngine.Dictionary.Register(new Thing()); // BaseEngine.Dictionary is
                                                     // a static object
    }
}

这个能正常工作吗?

对于基本问题,我很抱歉,我刚开始使用dll,并且无法访问笔记本电脑上的IDE,否则我会自己尝试。

编辑1:

所以…到目前为止一切都很好,除了。load似乎没有改变我在Program.cs中的预测对象我觉得这是一个愚蠢的问题,但还是让我头疼。

Assembly a = Assembly.LoadFrom(files[i]);
foreach (Type t in a.GetTypes())
{
    if (t is Mod)
    {
        ((Mod)t).Load(new ModOnLoadArgs(oreDict));
    }
}
编辑2:

所以我添加了"控制台"。在我Mod的Load函数中调用WriteLine,什么也没有出现。应该说点什么,对吧?我不会发疯吧?我能更好地测试一下吗?

DLL需要对引擎的引用,这有点不方便,因为这会使更改引擎中的内容变得更加困难——您必须小心不要破坏对DLL开发人员的向后兼容性。

另一个解决方案是创建一个,它只包含mod设计者所需的接口:

public interface IMod
{
    void OnLoad(ModLoadedArgs args);
}

这个接口库将被你的引擎和mod开发者引用——它是两个系统之间的合约。这个界面很少改变,您可以自由地开发和修改您的引擎。

最新更新