是否可以让一个外部类管理一个返回单例的工厂?
本文关键字:一个 单例 返回 工厂 管理 是否 外部 | 更新日期: 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类移到上层吗?因为你没有解释这个类做什么,这可能是一个愚蠢的答案,但似乎类依赖于存储库,我猜它正在做某种业务逻辑,因此它不应该在数据层。这将允许您像通常那样在类中直接实现单例。