绑定到当前项目中未声明的属性
本文关键字:未声明 属性 项目 绑定 | 更新日期: 2023-09-27 18:27:06
我有以下示例代码:
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
属性。
推荐的方法是什么?
public interface IData
{
IEnumerable<IWord> Vocabulary { get; }
}
public interface ITest
{
IWord FindWord(string word);
}
使用接口允许与实现分离,因此调用方不需要知道实现的详细信息。
这样,您就可以在运行时加载包含定义的程序集,而依赖于接口的代码就不在乎了。
我会创建一个包含接口的satellite程序集。
例如:
PluginBase包含两个程序集中引用的接口(游戏插件/主游戏)
public Interface Test
{
WordBase FindWord( String word );
}
请注意,WordBase类也必须在PluginBase.dll中。
这只是一个例子,其他人已经考虑了很多插件架构。你可以看看这些。