gpt4 book ai didi

caSTLe-windsor - 温莎城堡注册一个通用接口(interface)并检索所有注册的实例间接继承自它

转载 作者:行者123 更新时间:2023-12-04 04:31:00 26 4
gpt4 key购买 nike

我有以下结构 -

public interface IBaseInterface<T>
{
}

public interface IChildInterface1<Class1> : IBaseInterface<Class1>
{
}

public interface IChildInterface2<Class2> : IBaseInterface<Class2>
{
}

public class ImplementationClass1 : IChildInterface1<Class1>
{
}

public class ImplementationClass2 : IChildInterface2<Class2>
{
}

我想在程序集中注册直接或间接实现 IBaseInterface 的所有类型,因此我希望能够在给定 IBaseInterface 的情况下注册 ImplementationClass1 和 ImplementationClass2。然后我想根据 ChildInterface 类的泛型类型定义检索任何具体类型。

我正在注册这样的类型 -
container.Register(
AllTypes.FromAssemblyContaining<Class1>()
.BasedOn(typeof(IBaseInterface<>))
.WithService.Base()
.Configure(c => c.LifeStyle.Transient)
);

然后使用解析类型
var impl = container.Resolve(typeof(IChildInterface1<>))

我希望这会给我一个 ImplementationClass1 的实例,但是我得到了错误 -

找不到支持服务 IChildInterface`1 的组件

有人可以弄清楚我做错了什么,这甚至是我正在尝试的有效场景吗?

这是我的全部代码 -
using Castle.MicroKernel.Registration;

namespace complexresolutionioc
{
class Program
{
static void Main(string[] args)
{
var container = new Castle.Windsor.WindsorContainer();

container.Register(
AllTypes.FromAssemblyContaining<Class1>()
.BasedOn(typeof(IBaseInterface<>))
.WithService.AllInterfaces()
.Configure(c => c.LifeStyle.Transient)
);

var thisWorks = container.Resolve<IChildInterface1<Class2>>();
}
}

public interface IBaseInterface<T>
{
}

public interface IChildInterface1<Class1> : IBaseInterface<Class1>
{
}

public interface IChildInterface2<Class2> : IBaseInterface<Class2>
{
}

public class ImplementationClass1 : IChildInterface1<Class1>
{
}

public class ImplementationClass2 : IChildInterface2<Class2>
{
}

public class Class1 { }
public class Class2 { }

}

给我这个错误-

找不到支持服务 complexresolutionioc.IChildInterface1`1[[complexresolutionioc.Class2, complexresolutionioc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 的组件
在 c:\TeamCity\buildAgent\work\1ab5e0b25b145b19\src\CaSTLe.Windsor\MicroKernel\DefaultKernel_Resolve.cs:line 172 中的 CaSTLe.MicroKernel.DefaultKernel.Resolve(键入服务)
在 c:\TeamCity\buildAgent\work\1ab5e0b25b145b19\src\CaSTLe.Windsor\Windsor\WindsorContainer.cs:line 889 中的 CaSTLe.Windsor.WindsorContainer.Resolve(键入服务)
在 c:\TeamCity\buildAgent\work\1ab5e0b25b145b19\src\CaSTLe.Windsor\Windsor\WindsorContainer.cs:line 978 中的 CaSTLe.Windsor.WindsorContainer.ResolveT
在 C:\MyDev\complexresolutionioc\complexresolutionioc\Program.cs:line 21 中的 complexresolutionioc.Program.Main(String[] args)

-利亚斯

最佳答案

您需要提供要解析的封闭泛型类型:

var thisWorks = container.Resolve<IChildInterface1<Class2>>();

关于caSTLe-windsor - 温莎城堡注册一个通用接口(interface)并检索所有注册的实例间接继承自它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3941594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com