Я связываю свои экземпляры классов, которые наследуются от того же интерфейса в Ninject:
IOC.Kernel.Bind<IService>.ToConstant(new ServiceA());
IOC.Kernel.Bind<IService>.ToConstant(new ServiceB());
IOC.Kernel.Bind<IService>.ToConstant(new ServiceC());
public interface IService
{
[...]
}
public class ServiceA : IService { [..] }
public class ServiceB : IService { [..] }
public class ServiceC : IService { [..] }
Общий способ получения экземпляра будет IOC.Get<IService>();
, но, поскольку я связываю три разных класса, он не будет работать.
Я хочу получить действительный тип экземпляра на основе перечисления в моем приложении:
public IService GetCurrent()
{
switch (CurrentServiceEnum)
{
case ServiceType.ServiceA:
return IOC.Get<IService>()// ?? Get type ServiceA
case ServiceType.ServiceB:
return IOC.Get<IService>()// ?? Get type ServiceB
case ServiceType.ServiceC:
return IOC.Get<IService>()// ?? Get type ServiceC
}
return null;
}
Моя проблема в том, что я не могу понять, как получить экземпляр IService
указанного типа, например. ServiceB
.
Ninject docs говорят, что я на самом деле могу назвать каждую привязку и получить действительный тип следующим образом: IOC.Get<IService>("ServiceB")
однако мне не нравится идея именования по строке в данном конкретном случае, и я предпочел бы использовать универсальный тип (просто пример): IOC.Get<IService>.OfType<ServiceB>()
.
Позволит ли Ninject мне сделать это каким-нибудь методом?
Какой метод я должен использовать для достижения этого?