是否可以让一个外部类管理一个返回单例的工厂?

本文关键字:一个 单例 返回 工厂 管理 是否 外部 | 更新日期: 2023-09-27 18:16:33

我有一个需要,我希望我的类返回一个要共享的单个实例,所以我要使用一个返回单例的工厂。我的明显方法是将这个Factory直接作为static方法(即:' . create()),并完成它。

问题是我在这个类上的构造函数依赖于DI,需要注入几个依赖项。该类驻留在我的Domain Layer中,不能实例化表示需要注入的接口的存储库类的新实例。我也在使用存储库模式,存储库层可以访问域模型层,但显然我的域模型不能访问存储库(循环引用)。底线:我不能实例化那些具体的存储库类型,它们代表要在工厂中注入的依赖项。

我能想到的唯一解决方案是将Factory向上移动一层,因为这种需要具有单个实例的需求不是由类本身驱动的,而是由实现细节驱动的。我的班级何必在意;它不关心如何被实例化。

问题是,我不知道是否有一个工厂来管理这个类类型返回的单例,在原始类的之外?下面是我想做的(代码是大大简化,只关注问题:

Layer 1:可以引用存储库,并且可以将'new' up实例注入MyClass

public MyClass Create()
    {
       if myClass = null
           myclass = new MyClass(new Repository1(), new Repository2());
       else
           return myclass;
    }

层2:

public class MyClass
{
   public MyClass(IRepository1 repository1, IRepository2 repository2)
   {
   }
}

是否可以让一个外部类管理一个返回单例的工厂?

你考虑过将整个MyClass类移到上层吗?因为你没有解释这个类做什么,这可能是一个愚蠢的答案,但似乎类依赖于存储库,我猜它正在做某种业务逻辑,因此它不应该在数据层。这将允许您像通常那样在类中直接实现单例。