我需要我希望我的一个类返回一个要共享的实例,所以我将使用返回单例的Factory。我明显的方法是将这个Factory直接放在有问题的类上作为static
方法(即`.Create())并完成它。
我遇到的问题是我这个类的构造函数依赖于DI,需要注入几个依赖项。此类驻留在我的Domain Layer
中,无法实例化表示需要注入的接口的存储库类的新实例。我也在使用存储库模式,存储库层可以访问域模型层,但显然我的域模型无法访问存储库(循环引用)。结论:我无法实例化那些表示要在工厂注入的依赖项的具体存储库类型。
我能想到的唯一解决方案是将工厂向上移动一层,因为这需要单个实例不是由类本身驱动,而是由于实现细节。我的班级为什么要关心;它并不关心它是如何被实例化的。
问题是,我不知道是否有工厂管理此类类型返回的单例,在原始类之外?这就是我想要做的事情(代码是极大地简化为仅关注问题:
第1层:(引用了存储库,可以'新建'实例以注入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)
{
}
}
答案 0 :(得分:0)
您是否考虑在上层移动整个MyClass类? 既然你没有解释这个类做了什么,它可能是一个愚蠢的答案,但因为它看起来类依赖于存储库,我想它正在做某种业务逻辑,因此它不应该在数据层。 这将允许您像通常那样直接在类中实现单例。