У меня есть следующая структура -
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, поэтому я хочу иметь возможность регистрировать ExecutionClass1 и PracticeClass2 с учетом IBaseInterface.И затем я хочу получить любой конкретный тип на основе определения универсального типа классов ChildInterface.
Я регистрирую типы, подобные этому -
container.Register(
AllTypes.FromAssemblyContaining<Class1>()
.BasedOn(typeof(IBaseInterface<>))
.WithService.Base()
.Configure(c => c.LifeStyle.Transient)
);
, а затем разрешаю тип, используя
var impl = container.Resolve(typeof(IChildInterface1<>))
Я ожидал, что это даст мне экземпляр реализацииClass1, однако я получаю сообщение об ошибке -
Не найдено ни одного компонента для поддержки службы 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, Версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null]] был найден в Castle.MicroKernel.DefaultKernel.Resolve (Тип службы) в c:\ TeamCity \ buildAgent \ work \ 1ab5e0b25b145b19 \ src \ Castle.Windsor \ MicroKernel \ DefaultKernel_Resolve.cs: строка 172 в Castle.Windsor.WindsorContainer.Resolve (Служба типов) в c: \ TeamCity \ buildAgent \ work \ 1ab5e0b25b145b19 \ src \ Castle.Windsor \ Windsor \ WindsorContainer.cs: строка 889 в Castle.Windsor.WindsorContainer.ResolveT в c: \ TeamCity \ buildAgent \ work\ 1ab5e0b25b145b19 \ src \ Castle.Windsor \ Windsor \ WindsorContainer.cs: строка 978 в complexresolutionioc.Program.Main (String [] args) в C: \ MyDev \ complexresolutionioc \ complexresolutionioc \ Program.cs: строка 21
-ilias