【发布时间】:2014-08-07 15:53:08
【问题描述】:
public class MyClassFactory : IMyClassFactory
{
private readonly IMySingleton _mySingleton;
private readonly IMyNonSingleton _myNonSingleton;
public MyClassFactory(
IMySingleton mySingleton,
IMyNonSingleton myNonSingleton
)
{
_mySingleton = mySingleton;
_myNonSingleton = myNonSingleton;
}
public IMyResult CreateMyResult(int resultId)
{
// right here - have i not arbitrarily extended the lifespan
// of _myNonSingleton?
//
return new MyResult(_mySingleton, _myNonSingleton, resultId);
}
}
通过此设置,每个新的 MyResult 都将获得相同的 IMyNonSingleton 实例。解决这个问题的唯一方法不是每次创建 MyResult 时都在容器上再次调用 Resolve 吗?
同样,如果我这样做,那不是开始看起来像服务定位器模式吗?至少,我会违反诸如“不要调用容器,它会调用你”和“你只调用 Resolve 一次”这样的规则,对吗?
编辑:这里的想法是 IMySingleton 已在我的容器中注册为单例,而其他类则没有。
【问题讨论】:
-
我不一定会称之为
singletons,而是类似上下文实例。他们没有什么“单身”。 -
@TyCobb - 抱歉,从外观上看,我可以看出我在这里没有画出非常清晰的画面。内涵是IMySingleton已经在我的容器中注册为单例,其他类没有。
标签: c# dependency-injection inversion-of-control containers