Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到当前项目中未声明的属性_C#_Reflection_.net Assembly - Fatal编程技术网

C# 绑定到当前项目中未声明的属性

C# 绑定到当前项目中未声明的属性,c#,reflection,.net-assembly,C#,Reflection,.net Assembly,我有以下示例代码: 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 L

我有以下示例代码:

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;
    }
}
静态类测试
{
公共词库FindWord(字符串字)
{
return(WordBase)Data.词汇表,其中(a=>a.Name==word.FirstOrDefault();
}
}
静态类数据
{
公共列表词汇表=新列表();
}
类词库
{
公共UInt32 Id{get;protected set;}
公共字符串名称{get;protected set;}
公共词库(UInt32 id,字符串名称)
{
Id=Id;
名称=名称;
}
}
我想要的是将
数据
类移动到一个外部程序集中,该程序集将通过反射加载。原因是我正在编写一个基于文本的冒险游戏创建者,它允许将多个情节链接在一起,其中每个集合将包含每个情节的游戏数据和逻辑

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

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


推荐的方法是什么?

我将创建一个包含接口的卫星组件

例如:

包含在两个程序集中引用的接口的插件库(gameplugin/main game)

请注意,WordBase类也必须位于PluginBase.dll中


这只是一个例子,其他人已经想到了很多插件架构。你可以看看这些。不要使用静态类

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

public interface ITest
{
    IWord FindWord(string word);
}
公共接口IData
{
IEnumerable词汇表{get;}
}
公共接口测试
{
IWord FindWord(字符串字);
}
使用接口允许与实现分离,因此调用方不需要知道实现细节

通过这种方式,您可以在运行时加载包含该定义的程序集,而依赖于该接口的代码则不会在意

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

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