2

我编写了一个包含几个类库的项目。在下层,我有一个如下所示的类:

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 它没有得到我在主项目中创建的实例。

有没有办法让它工作?

4

2 回答 2

1

只要第二个类库引用了第一个类库,您就应该能够执行您的建议。

于 2013-03-28T13:34:11.327 回答
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属性,则类的构造函数可以将自己设置为当前实例。

于 2013-03-28T13:56:53.213 回答