2

我有以下示例代码:

static class Test
{
    public WordBase FindWord( String word )
    {
        return (WordBase)Data.Vocabulary.Where( a => a.Name == word ).FirstOrDefault();
    }
}

static class Data
{
    public List<WordBase> Vocabulary = new List<WordBase>();
}

class WordBase
{
    public UInt32 Id { get; protected set; }
    public String Name { get; protected set; }

    public WordBase( UInt32 id, String name )
    {
        Id = id;
        Name = name;
    }
}

我正在寻找的是将Data类移动到将通过反射加载的外部程序集中。这样做的原因是我正在编写一个基于文本的冒险游戏创建器,它允许将多个情节链接在一起,其中每个程序集将包含每个情节的游戏数据和逻辑。

我遇到的问题是该FindWord方法将失败,因为Data.Vocabulary当前项目中不存在;请记住,它已被移出到外部加载的程序集中,因此不会有任何强类型引用。

我认为我需要通过接口或抽象类创建某种契约,以便FindWord方法可以绑定到Data.Vocabulary属性。

这样做的推荐方法是什么?

4

2 回答 2

1

不要使用静态类。

public interface IData
{
    IEnumerable<IWord> Vocabulary { get; }
}

public interface ITest
{
    IWord FindWord(string word);
}

使用接口允许与实现分离,因此调用者不需要了解实现细节。

这样,您可以在运行时加载包含定义的程序集,并且依赖于接口的代码将不在乎。

于 2013-08-09T14:03:00.030 回答
1

我将创建一个包含接口的卫星程序集。

例如:

PluginBase 包含在两个程序集中引用的接口(游戏插件/主游戏)

public Interface Test
{
    WordBase FindWord( String word );
}

注意 WordBase 类也必须在 PluginBase.dll 中。

这只是一个例子,其他人已经想到了很多插件架构。你可以看看那些。

于 2013-08-09T14:00:27.970 回答