c# - CaSTLe Windsor 解析通用接口(interface)

标签 c# generics castle-windsor

我有一些实现的通用接口(interface)。

interface IBaseInterface<in TObject, out TDetails>
{
    TDetails GetDetails(TObject obj);
}

abstract class BaseImpl<TObject> : IBaseInterface<TObject, string>
{
    public abstract string GetDetails(TObject obj);
}

class Impl0 : BaseImpl<decimal>
{
    public override string GetDetails(decimal obj)
    {
        return "decimal";
    }
}

class Impl1 : BaseImpl<string>
{
    public override string GetDetails(string obj)
    {
        return "string";
    }
}

class Impl2 : BaseImpl<Details>
{
    public override string GetDetails(Details obj)
    {
        return "Details";
    }
}

class Impl3<TDetail> : BaseImpl<DetailsGeneric<TDetail>> where TDetail : Details
{
    public override string GetDetails(DetailsGeneric<TDetail> obj)
    {
        return "GenericDetails";
    }
}

class Details
{

}

class Details1 : Details
{

}

class DetailsGeneric<TDetails> : Details
{

}

使用 WinsdorInstaller 类注册组件

container.Register(AllTypes.From(typeof(Program).Assembly.GetTypes())
  .BasedOn(typeof(IBaseInterface<,>)).WithServiceAllInterfaces()
  .LifestyleTransient());

尝试解决。最后两次调用抛出异常,但我希望它们返回为基本类型声明的组件

class Program
{
    static void Main(string[] args)
    {
        var container = new WindsorContainer();

        container.Install(new WindsorInstaller());

        Details("test", container);

        Details(123m, container);

        Details(new Details(), container);

        Details(new DetailsGeneric<Details>(), container);

        Details(new Details1(), container); // "ComponentNotFound" exception

        Details(new DetailsGeneric<Details1>(), container); // "ComponentNotFound" exception           
    }

    static void Details<TType>(TType obj, WindsorContainer container)
    {
        var details = container.Resolve<IBaseInterface<TType, string>>().GetDetails(obj);

        Console.WriteLine(details);
    }
}

我哪里错了?我可以修复它吗?

最佳答案

据我所知,Details1 上没有任何组件关闭...

关于c# - CaSTLe Windsor 解析通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120390/

相关文章:

java - 扩展 List 及其泛型

.net - .NET 中的 CaSTLe、AOP 和日志记录

c# - 单一方法的管理员权限

c# - 如何更改 winforms 标签中行与行之间的空格?

java - 为什么这个通用代码可以编译?

Java泛型——获取类的实例

caSTLe-windsor - CaSTLe Windsor CollectionResolver : Why doesn't it work on Resolve calls?

nhibernate - NHibernate CaSTLe Facility的延迟加载

c# - 使用证书调用服务:Error - "Keyset does not exist"

c# - 如何调用扩展方法从数组中删除项目