Ninject在WindowsForm上的應用
Ninject在WinForm上相較於WebForm來說有較多的限制,其中較重要的問題是不支援Form上的屬性(Property)注入 要在WinForm上進行注入需要撰寫一些額外的程式碼以茲注入:
1. CompositionRoot:這個類別是提供Ninject模組的註冊以及解析Client類別並注入其所需的物件。
2. ApplicationModule: 這個類別是註冊要注入的類別與其注入邏輯。
程式碼大綱如下:
public class CompositionRoot
{
private static IKernel kernel;
public static void Wire( params INinjectModule[] module)
{
kernel = new StandardKernel(module);
}
public static T Resolve<T>()
{
return kernel.Get<T>();
}
}
public class ApplicationModule: NinjectModule
{
public override void Load()
{
Kernel.Bind< ITest>().To< Test>();
}
}
有了這兩個類別之後需要讓它Work起來,因此要在程式的起始程式Program.cs中撰寫相對應的處理邏輯
[ STAThread]
static void Main()
{
CompositionRoot.Wire(new ApplicationModule ());
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault( false);
Application.Run( CompositionRoot.Resolve<Form1 >());
}
Form類別僅能靠建構子注入的方式,但是其所注入的類別並無限制;該類別可以使用建構子或是屬性注入。