C# Castle ResolveAll返回空数组
下面是我的程序集(TestAssembly)的外观 我正在使用Castle Windsor注册和解析所有这些组件C# Castle ResolveAll返回空数组,c#,.net,castle-windsor,C#,.net,Castle Windsor,下面是我的程序集(TestAssembly)的外观 我正在使用Castle Windsor注册和解析所有这些组件 container.Register(AllTypes.FromAssemblyNamed("TestAssembly") .BasedOn<I1>() .LifestyleSingleton()); container.Register(AllTypes.f
container.Register(AllTypes.FromAssemblyNamed("TestAssembly")
.BasedOn<I1>()
.LifestyleSingleton());
container.Register(AllTypes.fromsassemblyname(“TestAssembly”)
.BasedOn()
.singleton()的生活方式;
接下来,我尝试使用
container.ResolveAll();
希望得到一个对象A和B的数组。相反,我得到一个空数组。有什么问题吗?我认为您需要告诉容器哪些服务与接口关联,例如:
container.Register(AllTypes.FromAssemblyNamed("TestAssembly")
.BasedOn<I1>()
.WithServiceBase()
.LifestyleSingleton());
container.Register(AllTypes.fromsassemblyname(“TestAssembly”)
.BasedOn()
.WithServiceBase()
.singleton()的生活方式;
我似乎已经找到了问题的答案(参见我对汉斯·乔纳斯回答的评论)
在接口继承的情况下,有一个fluentapi,您可以在其中指定服务应该使用的接口
使用问题中提到的示例:
container.Register(Classes.FromAssemblyNamed("TestAssembly")
.BasedOn<I1>()
.WithService.FirstInterface());
我是说,这样你可以做你想做的一切
I2 ObjA = container.Resolve<I2>();
I3 ObjB = container.Resolve<I3>();
I1[] ObjArray = container.ResolveAll<I1>();
I2 ObjA=container.Resolve();
I3 ObjB=container.Resolve();
I1[]ObjArray=container.ResolveAll();
但这会增加容器的大小。我不确定它对性能有何影响。我会把我的发现公布出来。我感谢大家对这一点的评论。谢谢。这对我来说也是个问题。谢谢,这解决了问题。以下是温莎API的参考资料documentation@HansJonus我似乎找不到足够的关于
Resolve
和ResolveAll
的API文档container.ResolveAll()
正在给我I1[]
。如何检索a
或B
的特定实例(在我的示例中是一个单例)。还有container.Resolve()
不会给我A
的实例。如何解决I2
的实现?还要确保您的类是公共的,如文档所述:“默认情况下,只有从程序集外部可见的类型才会被注册。”。如果使用内部类等,很容易错过。
container.Register(Classes.FromAssemblyNamed("TestAssembly")
.BasedOn<I1>()
.WithService.FirstInterface());
I2 ObjA = container.Resolve<I2>();
I3 ObjB = container.Resolve<I3>();
container.Register(Classes.FromAssemblyNamed("TestAssembly")
.BasedOn<I1>()
.WithService.AllInterfaces()
);
I2 ObjA = container.Resolve<I2>();
I3 ObjB = container.Resolve<I3>();
I1[] ObjArray = container.ResolveAll<I1>();