我从下面的链接中引用了这个例子。
http://blog.prabir.me/post/Dependency-Injection-%28DI%29-e28093-Hello-World-with-Ninject.aspx
using Ninject.Modules;
using Prabir.NinjectSample.Provider;
using Prabir.NinjectSamples.Providers.ConsoleWriter;
using Prabir.NinjectSample.Providers.MessageBoxWriter;
namespace Prabir.NinjectSample.ConsoleApplication
{
public class XDocModule : NinjectModule
{
public override void Load()
{
Bind<IWriter>().To<ConsoleWriter>();
Bind<XDoc>().ToSelf().InSingletonScope();
}
}
}
Load()
方法中,正在ConsoleWriter
与IWriter
. 它看起来是静态的和硬编码的。即每次我打电话时IWriter
,它都会初始化ConsoleWriter
。如果我也想使用怎么办MessageBoxWriter
。我将不得不更改Load()
方法中的代码来实现这一点。我是否遗漏了任何东西,或者这就是 Ninject 的行为方式?
此外,Load()
方法将被所有类型的接线调用。在其他课程中,我可能需要ConsoleReader
与IReader
. 在这种情况下,同样
Bind<IWriter>().To<ConsoleWriter>()
Bind<XDoc>().ToSelf().InSingletonScope()
也会受到打击。这是Ninject的预期方式吗?
让我更详细地解释我的问题。可以说我有一个下面给出的界面。
public interface IVehicle
{
PrintSpecification();
}
我有三个实现上述接口的类。它们可以如图所示。
public class Car implements IVehicle
{
public void PrintSpecification()
{ Console.WriteLine("Specification for Car");}
}
public class Bus implements IVehicle
{
public void PrintSpecification()
{ Console.WriteLine("Specification for Bus");}
}
public class Truck implements IVehicle
{
public void PrintSpecification()
{ Console.WriteLine("Specification for Truck");}
}
现在在我的主程序中,我会有这样的东西。在这里,我使用 new 运算符创建了 Car、Bus 和 Truck 的三个具体实现。我必须显示所有三辆车的规格。现在我想知道如何编写我的 Ninject 代码,以便不依赖具体类。
Public static void main()
{
IVehicle v1=new Car();
IVehicle v2=new Bus();
IVehicle v3=new Truck();
v1.PrintSpecification();
v2.PrintSpecification();
v3.PrintSpecification();
}