Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Castle ResolveAll返回空数组_C#_.net_Castle Windsor - Fatal编程技术网

C# Castle ResolveAll返回空数组

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

下面是我的程序集(TestAssembly)的外观

我正在使用Castle Windsor注册和解析所有这些组件

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>();