Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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 Windsor解析通用接口_C#_Generics_Castle Windsor - Fatal编程技术网

C# Castle Windsor解析通用接口

C# Castle Windsor解析通用接口,c#,generics,castle-windsor,C#,Generics,Castle Windsor,我有一些实现的通用接口 interface IBaseInterface<in TObject, out TDetails> { TDetails GetDetails(TObject obj); } abstract class BaseImpl<TObject> : IBaseInterface<TObject, string> { public abstract string GetDetails(TObject obj); } cl

我有一些实现的通用接口

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
{

}
接口IBaseInterface
{
t详细信息(TObject obj);
}
抽象类BaseImpl:IBaseInterface
{
公共抽象字符串GetDetails(TObject obj);
}
类Impl0:BaseImpl
{
公共重写字符串GetDetails(十进制对象)
{
返回“十进制”;
}
}
类Impl1:BaseImpl
{
公共重写字符串GetDetails(字符串obj)
{
返回“字符串”;
}
}
类Impl2:BaseImpl
{
公共重写字符串GetDetails(详细信息obj)
{
返回“详细信息”;
}
}
类Impl3:BaseImpl,其中TDetail:Details
{
公共重写字符串GetDetails(DetailsGeneric obj)
{
返回“GenericDetails”;
}
}
课程详情
{
}
类详细信息1:详细信息
{
}
类详细信息通用:详细信息
{
}
对寄存器组件使用WinsdorInstaller类

container.Register(AllTypes.From(typeof(Program).Assembly.GetTypes())
  .BasedOn(typeof(IBaseInterface<,>)).WithServiceAllInterfaces()
  .LifestyleTransient());
container.Register(AllTypes.From(typeof(Program).Assembly.GetTypes())
.BasedOn(typeof(IBaseInterface)).with服务接口()
.生活方式(暂时的);
试着下决心。最后两个调用抛出异常,但我希望它们返回为基类型声明的组件

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);
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var container=新的WindsorContainer();
容器。安装(新WindsorInstaller());
详细信息(“试验”,容器);
详细信息(123m,集装箱);
详细信息(新详细信息(),容器);
详细信息(新的详细信息generic(),容器);
详细信息(新的详细信息1(),容器);/“ComponentNotFound”异常
详细信息(新的详细信息generic(),容器);/“ComponentNotFound”异常
}
静态无效详细信息(t类型obj,WindsorContainer容器)
{
var details=container.Resolve().GetDetails(obj);
控制台写入线(详细信息);
}
}

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

据我所见,您没有关闭任何组件
详细信息1

没有支持服务控制台应用程序10.IBaseInterface`2[[ConsoleApplication10.Details1,ConsoleApplication10,Version=1.0.0,Culture=neutral,PublicKeyToken=null],找到[System.String,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]我可以使用基类中的组件吗?例如,我有一些自定义用户异常的修饰符,并使用IoC获取此类,我希望从WCF服务中装饰异常,但它们看起来像FaultException(FaultException中的descandant)也许我只能用一个类来处理所有的故障异常,有可能吗?