从另一个程序集中的一个程序集获取类的实例,但是在同一个项目中

时间:2013-03-28 13:31:28

标签: c# .net

我编写了一个包含很少类库的项目。 在下层我有一个类似这样的类:

namespace firstclasslibrary
{

    public abstract class Base<T> where T :SomeClass
    {
            public static Base<T> Current 
            { 
                 get 
                 {
                       return new Base() ;
                 }
            }
    }
}

然后在另一个类库中我有:

namespace secondclasslibrary
{
      public class Derived : Base
      {
           ///some kind of singleton ....
      }
}

现在在第一个类库中,我有另一个使用抽象类的类:

namespace firstclasslibrary
{
      public class JustAClass
      {
            public Base<SomeClass> baseclass = baseclass.Current;


            ////do some other things.....
      }
}

如果所有类都在同一个类库下,我就能得到Derived的实例,但由于它是一个不同的库,我得到null它不会得到我在主项目中创建的实例。 / p>

有没有办法让它发挥作用?

2 个答案:

答案 0 :(得分:1)

只要第二类库引用了第一类库,你就应该能够做你的建议。

答案 1 :(得分:0)

如果第一个库没有对第二个库的引用,那么它就不知道该类的具体实现,因此它无法自己创建它的实例。

您必须告诉班级如何创建实例,例如:

namespace firstclasslibrary {

  public abstract class Base {

    private static Base _current = null;

    public static Func<Base> CreateInstance;

    public static Base Current { 
      get {
        if (_current == null) {
          _current = CreateInstance();
        }
        return _current;
      }
    }

  }

}

在使用Current属性之前,您必须设置CreateInstance属性,以“学习”该类如何创建实例:

Base.CreateInstance = () => new Derived();

您还可以通过使_current属性受到保护来扩展此功能,以便Derived类的构造函数可以将自己设置为当前实例,如果您创建类的实例而不是使用Current属性。