C# 在同一项目的另一个程序集上从一个程序集获取类的实例

C# 在同一项目的另一个程序集上从一个程序集获取类的实例,c#,.net,C#,.net,我正在写一个几乎没有类库的项目。 在较低的层中,我有一个如下所示的类: namespace firstclasslibrary { public abstract class Base<T> where T :SomeClass { public static Base<T> Current { get {

我正在写一个几乎没有类库的项目。 在较低的层中,我有一个如下所示的类:

namespace firstclasslibrary
{

    public abstract class Base<T> where T :SomeClass
    {
            public static Base<T> Current 
            { 
                 get 
                 {
                       return new Base() ;
                 }
            }
    }
}
namespace firstclasslibrary
{
      public class JustAClass
      {
            public Base<SomeClass> baseclass = baseclass.Current;


            ////do some other things.....
      }
}
现在,在第一个类库中,我有另一个使用抽象类的类,如下所示:

namespace firstclasslibrary
{

    public abstract class Base<T> where T :SomeClass
    {
            public static Base<T> Current 
            { 
                 get 
                 {
                       return new Base() ;
                 }
            }
    }
}
namespace firstclasslibrary
{
      public class JustAClass
      {
            public Base<SomeClass> baseclass = baseclass.Current;


            ////do some other things.....
      }
}
命名空间第一类库
{
公共类JustAClass
{
公共基类baseclass=baseclass.Current;
////做一些其他的事情。。。。。
}
}
如果所有的类都在同一个类库下,我就能够得到派生类的实例,但是由于它是不同的库,我得到null,它就不能得到我在主项目中创建的实例


有什么方法可以让它工作吗?

只要第二个类库有对第一个类库的引用,你就应该能够做你建议的事情。

如果第一个类库没有对第二个类库的引用,那么它就不知道类的具体实现,所以它不能自己创建一个实例

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

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;
      }
    }

  }

}

您还可以通过将
\u设置为当前的
属性进行扩展,因此,如果您创建类的实例而不是使用
current
属性,则
派生的
类的构造函数可以将自己设置为当前实例。

第二个库有对第一个库的引用,但第一个库与第二个库没有任何关系。第一个库需要对第二个库的引用库能够在其中创建类的实例。其思想是在代码中有一个层,因此由于第一个库是最低层,我不想在第一个库中包含第二个库,但在第二个库中包含第一个库没有问题,这就是我尝试这样做的原因。代码中缺少什么吗?有一个
Base
类,但不是继承的
Base
类,也不是从
Base.Current
属性创建实例的
Base
类。属性中的
base
不能是类本身,因为您无法创建抽象类的实例。将new base()更改为new base(),但我没有在这里编写完整的代码。其思想是,如果有实例,基类将返回派生类的实例,如果没有实例,它将创建一个。(我希望现在清楚)在基类中,我有一个创建实例的内部类:私有类SingletonCreator{internal static readonly Application{u instance=instance;static SingletonCreator(){}}@roybarak:那么,问题是什么?就像我说的,只要我在同一类库下拥有所有类库,它就可以正常工作,但当我将基类取出到不同的类库(第一层)时,我在上层创建实例,并希望在第一层再次使用它时,它就不起作用了。所以我的问题是,我是否可以做我计划做的事情,是否可以在底层使用上层的实例?(谢谢你的帮助)。@roybarak:是的,这是可能的,通过注入创建实例所需的东西。这意味着你不能用它在静态成员中创建一个实例,你必须让单例创建变得懒惰,这样你才能在使用单例之前进行注入。谢谢你提供的信息,但我不理解你在上一个答案中的意思“…你必须让单例创建变得懒惰…”