2012-03-27 37 views
0

我有一个包含两个项目的解决方案。 首先让我描述一下我的场景。 项目1:拥有一个基类调用MyBaseClass 以下两个属性和方法,我很感兴趣:Activator.CreateInstance与继承类不在同一个项目中

TypeToLoad - 静态字符串属性,它的继承类简单的get/set功能来实例化。

实例 - 静态属性,它返回TypeToLoad与下面的代码行中指定的类型的MyBaseClass实例:

public static MyBaseClass Instance{ 
    return (MyBaseClass)Activator.CreateInstance(Type.typeof(TypeToLoad)); 
} 

现在在第二个项目我继承MyBaseClass如下(当然,正确的命名空间和引用已被添加)。

public class MyInheritClass : MyBaseClass { 
    //implements all other functions of MyBaseClass; 
} 

和我的其他代码文件中的一个,在同一个项目的MyInheritClass,我有以下几行代码:

Type myType = Type.typeof("MyInheritClass"); //returns the correct "Type" 
MyBaseClass.TypeToLoad = "MyInheritClass"; 
MyBaseClass myInstance = MyBaseClass.Instance; //Errors... because Type.typeof(...) could not resolve "MyInheritClass". 

当我移动MyInheritClass代码文件到同一项目作为MyBaseClass的代码运行得很好。

我的问题是,是否有无论如何通过设置MyBaseClass.TypeToLoad =“MyInheritClass”使用MyBaseClass.Instance创建MyInheritClass的实例,而无需在同一个项目中使用这两个类(MyBaseClass在基本DLL类库中,并且另一个项目中的MyInheritClass引用MyBaseclass DLL库)?

我试图寻找反射激活剂,但无法找到我正在寻找的东西。也许我不知道这个正确的术语。

+1

顺便说一句,你应该使用像[tag:.net]或[tag:c#]这样的描述性标签。如果你这样做,你很可能会很快得到答案。 – svick 2012-03-27 01:17:00

回答

2

假设你实际上意味着Type.GetType()(而不是Type.typeof(),这将不会编译),那么它清楚地记录为做你正在观察什么:

类型的装配合格的名称获取。 [...]如果类型位于当前正在执行的程序集或Mscorlib.dll中,则只需提供由其名称空间限定的类型名即可。

它还解释了如何解决它:将程序集的名称添加到类型名称。所以,如果你的类型被称为MyInheritClass,它在MyNamespace命名空间和MyAssembly组件(通常是相同的项目名称),你可以在类型名称设置为

MyNamespace.MyInheritClass, MyAssembly 

,它应该工作。

另外,您应该避免使用字符串作为类型名称,使用实际的Type对象更安全。 TypeToLoad应该是Type类型,而不是string

或者,也许你不应该使用这样的设计。我不知道你为什么要这样做,但我很肯定有一个更好的解决方案,不涉及在这样的基类上设置静态字段。 (当你有两种实现相同基类的类型时会发生什么?)

+0

嗨svick,你是绝对正确的关于我键入Type.TypeOf()而不是Type.GetType()的错误。 – NPToita 2012-03-27 03:20:24

+0

我朝这个方向前进的目的是因为我有一组提供者,这些提供者将是我的基础/核心,具有默认功能。对于我拥有的每个客户端,我都会根据需要继承这些提供程序,并在必要时覆盖其虚拟方法,并在配置文件中将提供程序类型指向正确的客户提供程序类。而且我不想将所有客户都集中到同一个程序集中,因为让客户A的库也包含客户B的代码是没有意义的。 – NPToita 2012-03-27 03:30:43

+0

想象一下,如果客户端的数量达到100以上,那么管理代码集就会非常糟糕。 通过直接进入,它使我能够在各自的项目上分别开发每个客户端提供程序,并将该DLL转储到其客户端应用程序中,并将提供程序指向客户端类。 与会员提供商类似的东西。 谢谢您的解决方案/建议。我一定会尝试一下,并会给予反馈。我很漂亮的身体其他也有我遇到的同样的问题。 非常感谢。 Thinh P. Nguyen – NPToita 2012-03-27 03:30:55