Ninject在WindowsForm上的應用

  • 1745
  • 0

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類別僅能靠建構子注入的方式,但是其所注入的類別並無限制;該類別可以使用建構子或是屬性注入。