2015-09-12 7 views
0

Я использую Window Forms C# с Ninject версии: 2.0.0.1реализация Ninject в Window Forms - C#

Первый Установили Ninject Пакет: ninject.extensions.infrastructure.winforms

Во-вторых, я создал новый класс со следующим кодом.

public class CustomModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IDAL.IORDR>().To<DAL.DAL_ORDR>(); 
    } 
} 

В-третьих, в виде окна я сделал ниже

public partial class SODetails : Form 
{ 
    public IORDR _IORDR { get; set; } 

    [Inject] 
    public SODetails(IORDR ORDR) 
    { 
     _IORDR = ORDR; 
    } 

    public SODetails() 
    { 
     InitializeComponent(); 
    } 
} 

Наконец в Program.cs, я сделал следующий код

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    var kernel = new StandardKernel(new CustomModule()); 
    var form = kernel.Get<SODetails>(); 
    Application.Run(form); 
} 

Хотя я могу впрыснуть но форма не показывает никакого контроля. Я делаю неправильную реализацию Ninject?

ответ

0

Я изменил следующий код из

public partial class SODetails : Form 
{ 
    public IORDR _IORDR { get; set; } 

    [Inject] 
    public SODetails(IORDR ORDR) 
    { 
     _IORDR = ORDR; 
    } 

    public SODetails() 
    { 
     InitializeComponent(); 
    } 
} 

в

InitializeComponent();

} 
} 
+0

alright ... u вызывается InitializeComponent() из обоих конструкторов. Любая конкретная причина не использовать цепочку конструкторов? – Kapoor

+0

Injection Dependency никогда не позволит мне вызвать конструктор по умолчанию. – Pankaj

+0

Конечно .. если вы вызываете конструктор по умолчанию напрямую, у вас никогда не будет шанса ввести зависимость. – Kapoor

0

Я вижу проблему.

Итак, ваша форма SODetails запущена, но на ней нет никаких элементов управления, которые вы добавили в конструктор. Я прав?

Проблема заключается в том, что InitializeComponent() не вызывается.

Пожалуйста, измените код, чтобы вызвать конструктор по умолчанию &, все будет работать нормально. я сделал небольшие изменения в код для конструктора цепочки открытой SODetails (IORDR ORDR): это() {....}

public IORDR _IORDR { get; set; } 

    [Inject] 
    public SODetails(IORDR ORDR) : this() 
    { 
     _IORDR = ORDR; 
    } 

    public SODetails() 
    { 
     InitializeComponent(); 
    } 


    public IORDR _IORDR { get; set; } 

    [Inject] 
    public SODetails(IORDR ORDR) : this() 
    { 
     _IORDR = ORDR; 
    } 

    public SODetails() 
    { 
     InitializeComponent(); 
    }