【发布时间】:2013-01-22 03:24:52
【问题描述】:
简介:
我正在使用Ninject Factory Extension 将简单的对象工厂注入到我的服务类中。
这是我的接口和实现它的两个类:
public interface ICar
{
void Drive();
void Stop();
}
public class Mercedes : ICar
{
public void Drive()
{
Do mercedes drive stuff...
}
public void Stop()
{
Do mercedes stop stuff...
}
}
public class Ferrari : ICar
{
public void Drive()
{
Do ferrari drive stuff...
}
public void Stop()
{
Do ferrari stop stuff...
}
}
这是我在运行时动态创建汽车的对象工厂:
public interface ICarFactory
{
ICar CreateCar(string carType);
}
public class CarFactory : ICarFactory
{
public ICar CreateCar(string carType)
{
ICar car;
switch (type)
{
case "mercedes":
car = new Mercedes();
break;
case "ferrari":
car = new Ferrari();
break;
}
return car;
}
}
然后使用ninject工厂扩展“ToFactory”方法绑定我的汽车工厂接口:
public class CarModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<ICarFactory>().ToFactory();
}
}
问题:
我的工厂按预期注入到我的服务类中,可用于创建
汽车对象,但是 ninject 在这里爆炸,因为它无法正确解析 ICar
到具体类型,即。 Mercedes 或 Ferrari 由工厂 CreateCar() 方法返回。
public CarService(string carType, ICarFactory carFactory)
{
var car = carFactory.CreateCar(carType);
}
问题:
假设我在这里使用的工厂模式与 ninject 工厂扩展的工作方式兼容,我如何设置 ICar -> Ferrari、ICar -> Mercedes 等的绑定,以便它们可以在用这种方法运行时间?
谢谢!
【问题讨论】:
-
我不太确定您期望发生什么。如果
carType的值为"mercedes",那么您是否期望var car的类型应该是Mercedes而不是ICar? C# 不能这样工作。 -
ICar的绑定在哪里? Ninject 工厂扩展可能在这里控制并正在寻找您的ICar绑定。当它找不到它们时,它会炸毁..
标签: c# .net inversion-of-control ninject factory