C#,从引用的项目中访问类

时间:2009-05-08 08:55:42

标签: c# design-patterns inheritance types reference

在C#中,我正在开发几个具有一些标准功能的Windows服务,因此我将所有这些常用功能放入一个单独的引用实用程序项目中。

我有一种情况需要使用Activator.CreateInstance从实用程序项目创建驻留在我的Windows服务项目中的业务类实例。

我的实用程序项目知道Type.GetType调用的命名空间和类名,但是类型始终为null,当我考虑它时,它将无法从它引用的项目中获取类型,还是可以吗?

简而言之:

项目A参考公用事业项目 Utility Project希望从项目A创建类,它知道命名空间和类名。

我是否应该遵循设计模式或方法来实现此功能?或者这看起来像是否,不,我应该重构?

感谢您寻找

4 个答案:

答案 0 :(得分:4)

你可以使用反射来解决循环引用问题,正如Jon指出的那样,但我建议重新思考设计并重构它。两个建议。

  • 使用接口来解释A和B.(首选解决方案)
  • 将A和B所需的部分移动到C中,仅引用A和B中的C.

答案 1 :(得分:1)

如果希望Type.GetType找到不在mscorlib或调用程序集中的类型,则需要指定完全限定的程序集名称(包括版本等,如果它是强名称的)

例如:

// Prints nothing
Console.WriteLine(Type.GetType("System.Linq.Enumerable"));
// Prints the type name (i.e. it finds it)
Console.WriteLine(Type.GetType("System.Linq.Enumerable, System.Core, "
     + "Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"));

或者,您是否可以在实用程序项目中将其作为通用方法,并让调用者将类型指定为类型参数?

答案 2 :(得分:1)

您可以查看依赖注入/ ioc容器。

例如,在实用程序库中创建一个接口,并在Windows服务的特定类中实现该接口。然后将实例传递给实用程序类。这样,实用程序库对Windows服务一无所知。

答案 3 :(得分:0)

听起来像循环参考问题!你可能需要重构!