让一个外部阶级管理一个返回单身人士的工厂是否可以接受?

时间:2013-05-31 21:19:37

标签: c# oop design-patterns singleton factory-pattern

我需要我希望我的一个类返回一个要共享的实例,所以我将使用返回单例的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)
   {

   }

}

1 个答案:

答案 0 :(得分:0)

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