Ответов и ссылки Марка Симанна достаточно, но я хочу кое-что добавить. Как новичок в DI (которым я являюсь), этот вопрос всегда вызывает у меня сомнения: «Хорошо, нет ничего нового, но когда и как мои реальные объекты вызываются и вводятся?». Мне потребовалось некоторое время, чтобы понять и применить.
Когда вы будете следовать ответам и ссылкам, вы увидите это. Вы должны зарегистрировать свои интерфейсы и классы в файле приложения Global.asax для веб-приложения. Например, если вы используете Ninject, перейдите в nuget и загрузите Ninject.Web (который предназначен для веб-форм) и примените его, как в этом примере http://azolotar.blog.com/2010/06/22/ninject-2-0-in-webforms/
Ключевая точка в примере.
- Global.asax унаследован от NinjectHttpApplication (который находится в Ninject.Web.dll)
- Метод CreateKernel переопределяется, здесь вы создаете ядро и сообщаете свою карту зависимостей контейнеру
- BasePage: это для веб-форм, поэтому ваш интерфейс на страницах будет разрешен, если все они будут получены из базовой страницы.
Я должен добавить это, реализация BasePage довольно проста (вот код на github ), у вас, вероятно, уже есть базовая страница, поэтому добавьте эту строку KernelContainer.Inject (this); OnInit вашей базовой страницы может решить эту проблему. Еще один последний остаток: если вы собираетесь использовать что-либо в ascx, вы должны переопределить OnInit вашего ascx, чтобы контейнер мог разрешать зависимости.
Я знаю, вы сказали, что нет MVC или сети :) Но логика та же
- Установите вашу зависимую карту при запуске приложения (Main? Для windows)
- Поскольку он не является веб-сайтом, не имеет URL-адреса и не имеет форм прямого вызова, вы назовете его Как использовать Ninject в приложении Windows Forms? как в этом примере. Не знаю, используете ли вы какие-нибудь скороговорки MVP или MVVM, но это может быть отправной точкой
Черт возьми, это не очень полезный ответ, но в любом случае, надеюсь, это поможет.