我使用实现接口ISearchSource
container.Register(AllTypes.FromThisAssembly().BasedOn<ISearchSource>().WithService.AllInterfaces());
其中一个是通过CollecctionResolver
解决的public SearchBot(ISearchSource[] searchSources)
到目前为止很好。
现在,我想得到其中一个(一个ViewSearchSource),它必须是通过上面的构造函数解决的同一个,因为我在某种生活方式中)
并像这样解决它
Container.Resolve<ViewSearchSource>("ViewSearchSource").Bla();
我尝试了这个(以及许多其他的东西),但它给我一个第二个(不同的/单独的)对象 - 我不能拥有
container.Register(Component.For<ISearchSource>()
.ImplementedBy<ViewSearchSource>()
.Named(typeof(ViewSearchSource).Name));
有谁知道我需要做什么?
附录
我最终这样做 - 这是一种需要静态服务定位器的解决方法。
Container.Resolve<ISearchSource>(typeof(ViewSearchSource).ToString());
所以基本上,这需要所有已注册的ISearchSource对象(从我注册的6个左右依赖于CollectionResolver)并返回我通过字符串传递的类型
我仍然希望能够使用显式类名ViewSearchSource
来使用构造函数注入,但还没有想出如何执行此操作。
某种转发&#39;需要例如Component.For<I1, I2>
,但因为我需要在AllInterfaces()
注册和单个组件注册之间拆分注册,我看不到使用Castle实现此目的的方法
答案 0 :(得分:0)
我最终这样做 - 这是一种需要静态服务定位器的解决方法。
Container.Resolve<ISearchSource>(typeof(ViewSearchSource).ToString());
所以基本上,这需要所有已注册的ISearchSource对象(从我注册的6个左右依赖于CollectionResolver)并返回我通过字符串传递的类型
我仍然希望能够使用显式类名ViewSearchSource
来使用构造函数注入,但还没有想出如何执行此操作。
需要某种转发,例如Component.For<I1, I2>
但是因为我需要在AllInterfaces()
注册和单个组件注册之间拆分注册,我无法看到使用Castle实现此目的的方法
答案 1 :(得分:0)
使用ISubDependencyResolver that relies on naming convention。关于配置FTW的惯例!