我有一个需要,我希望我的一个类返回一个要共享的实例,所以我打算使用一个返回单例的工厂。我显而易见的方法是将这个工厂作为static
方法(即`.Create())直接放在有问题的类上并完成它。
我遇到的问题是我在这个类上的构造函数依赖于 DI,并且需要注入几个依赖项。此类驻留在 myDomain 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)
{
}
}