StructureMap с Windows Forms - PullRequest
       4

StructureMap с Windows Forms

4 голосов
/ 02 октября 2011

Я привык работать с StructureMap с веб-приложениями ... но сейчас я работаю над проектом Windows Forms и хотел бы использовать его, но не знаю, как его настроить.

В Интернете у меня был бы класс начальной загрузки, который вызывается в Application_Start на Global.asax, но я не знаю, как сделать то же самое на WinForms.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 04 октября 2011

Вы можете инициализировать контейнер в методе static main, запускающем ваше приложение. Затем извлеките экземпляры формы из контейнера, чтобы можно было внедрить любые необходимые зависимости. Вы все еще можете поместить код инициализации в Bootstrapper.

static class Program
{
    [STAThread]
    static void Main()
    {
        ObjectFactory.Initialize(...);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(ObjectFactory.GetInstance<Form1>());
    }
}
1 голос
/ 02 октября 2011

Для приложения Winforms встречная часть Application_Start будет основным методом, который инициализирует первую форму.

При использовании сопоставителей ORM с веб-приложениями у вас обычно есть правило большого пальца для создания контекста данных / сеанса для каждого запроса http.Для приложения Winforms вы склонны использовать контекст для каждой операции или формы.

0 голосов
/ 02 октября 2011

Вы бы структурировали загрузочную конфигурацию и конфигурацию IoC одинаково (хотя я не уверен, как бы вы включили сами классы форм, я мало работал с WinForms) Единственная реальная разница, которая вам понадобится, - это когда / где вызывается инициализатор. Это просто должно быть при запуске приложения. Для веб-приложений вы действительно вызываете его из Application_Start. Я думаю, что в приложениях WinForms это было бы в событии OnLoad основной формы .

Если у вас где-нибудь есть метод main (похожий на консольное приложение), тогда он также будет работать. Это может произойти, если приложение WinForms было перенесено, например, из консольного приложения.

...