Итак, я пытаюсь использовать комбинацию MEF и Ninject в приложении, которое я пишу.В основном я добавляю расширения через MEF во время выполнения.Я не понимаю, как (или если это вообще возможно) я могу обновить привязки Ninject во время выполнения.
Например, скажем, у меня есть следующий элемент, импортированный MEF:
[Export(typeof(ICar))]
public class BmwCar : ICar
{
private ICarLogger _carLogger;
public BmwCar(ICarLogger carLogger)
{
_carLogger = carLogger;
}
public static string Type
{
get { return "Sedan"; }
}
public string GetBrand()
{
return "BMW";
}
public static Type InterfaceType { get { return ICar; } }
public static Type CarType { get { return GetType(); } }
}
Теперь, обычно, если бы я знал этот элемент во время компиляции, я мог бы просто создать модуль Ninject со следующими привязками, такими как:
public class NinjectSetup : NinjectModule
{
public override void Load()
{
Bind<CarLogFactory>().ToSelf().InSingletonScope();
Bind<ICarLogger>().ToMethod(x => x.Kernel.Get<CarLogFactory>(new ConstructorArgument("vehicleName", BmwCar.Type)).WhenInjectedInto<BmwCar>();
}
}
Итак, проблема в этой строке:
Bind<ICarLogger>().ToMethod(x => x.Kernel.Get<CarLogFactory>(new ConstructorArgument("vehicleName", BmwCar.Type)).WhenInjectedInto<BmwCar>();
I 'Я не уверен, как я могу добавить что-то подобное динамически после импорта BmwCar.Очевидно, я не могу использовать универсальный во время выполнения, так как тип необходим во время компиляции.Поскольку я не могу использовать дженерики во время выполнения, кажется, что-то вроде:
var binding = new BindingBuilder<ICarLogger>(new Binding(typeof(ICarLogger)), this.Kernel).ToMethod(x => x.Kernel.Get<CarLogFactory>(new ConstructorArgument("vehicleName", imported.Type)).WhenInjectedInto<imported.CarType>();
не вариант.Кто-нибудь знает о создании новых привязок во время выполнения?