3
我有一些通用的接口實現。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);
}
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);
}
}
我哪裏錯了組件?我可以修復它嗎?
什麼異常? –
ComponentNotFoundException – user1782320
沒有用於支持服務的組件ConsoleApplication10.IBaseInterface'2 [[ConsoleApplication10.Details1,ConsoleApplication10,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null],[System.String,mscorlib,Version = 4.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089]]找到了 – user1782320