我正在尝试确定在解析类型时如何注入特定的服务实例。
例如,对于Unity,我可能会执行以下操作:
IFoo fooService = Container.Resolve<IFoo>();
fooSerivce.DoBar( "someParameter" );
ParameterOverrides overrides = new ParameterOverrides()
{
{ "fooService", fooService }
};
return Container.Resolve( type, overrides );
如何使用Simple Injector完成此操作?
答案 0 :(得分:1)
简单注射器没有内置支持来提供容器的解决方案&#39;方法,因为这是一个坏主意,因为它的主要用例是为注入构造函数提供运行时数据。构建应用程序组件取决于运行时数据是一种反模式,详见here。
有一些罕见的情况虽然你可以解决这个问题,但这主要发生在与你无法控制的第三方库或框架集成时。你可能会在Prism中遇到这样的情况,它似乎是围绕页面和导航服务之间的循环依赖而设计的,这是棱镜这样做的主要原因。
你应该看一下this特定的Q&amp; A。它谈到了WebFromsMvp,它具有与Prism相同的设计怪癖。问题和答案描述了使用Simple Injector非常有效地解决这个问题的方法。
<强>更新强>
从您在问题中显示的示例中,似乎根本不需要使用覆盖,因为您注入了已从容器中解析的服务。相反,您可以执行以下操作:
IFoo fooService = Container.GetInstance<IFoo>();
fooSerivce.DoBar("someParameter");
return Container.GetInstance(type);
只要IFoo
注册Scoped
或Singleton
生活方式,type
在其构造函数中接受IFoo
,就会注入相同的实例转发type
。