Это не могло бы быть ответом, который Вы ищете, но если Вы пишете модульные тесты, Вы, вероятно, не должны использовать инжектор и скорее вводить насмешку или поддельные объекты вручную.
, С другой стороны, если Вы действительно хотите заменить единственную привязку, Вы могли бы использовать Modules.override(..)
:
public class ProductionModule implements Module {
public void configure(Binder binder) {
binder.bind(InterfaceA.class).to(ConcreteA.class);
binder.bind(InterfaceB.class).to(ConcreteB.class);
binder.bind(InterfaceC.class).to(ConcreteC.class);
}
}
public class TestModule implements Module {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
}
Guice.createInjector(Modules.override(new ProductionModule()).with(new TestModule()));
Посмотрите детали здесь .
, Но поскольку javadoc для Modules.overrides(..)
рекомендует, необходимо разработать модули таким способом, которым Вы не должны переопределять привязку. В примере Вы дали, Вы могли выполнить это путем перемещения привязки InterfaceC
к отдельному модулю.
Не пренебрегайте MVVM - это также верно и для WinForms. По сути, если вы используете привязку данных, вам нужно принять решение о том, к чему будут привязаны ваши объекты. Часто, особенно для более сложного пользовательского интерфейса, вы не хотите напрямую привязываться к своим объектам домена, вы хотите создавать специализированные классы (иногда оболочки), к которым ваш пользовательский интерфейс может привязать, которые предоставляют все необходимое для представления (суть MVVM) и метод работает так же хорошо с Winforms.
Хорошую серию статей о подходе WinForms Model-View-Presenter можно найти в
Просто начните писать модульные тесты для всего, что вы можете придумать. Поскольку некоторые части окажется трудным для модульного тестирования из-за тесной связи с WinForms, разделите их. Чистый. Вымойте. Повторите.
То, что я всегда буду делать (первый) должен иметь многоуровневое приложение
Это очень хорошо организует ваше приложение. Тогда я бы поискал какой-нибудь подход MVC. Я не так много работал с WinForms, больше с Asp.net и некоторыми клиентами Java Desktop (где я использовал MVC ). WinForms больше работает с подходом привязки данных .Net (DataSource, DataMember, .. .). Вам следует придерживаться этого подхода, а не пытаться заставить что-то другое. Я обнаружил, что это не совсем так.
Что всегда полезно, так это размещать логику пользовательского интерфейса в различных элементах управления (например, UserControls в Asp.net). Это облегчает повторное использование.
Наше эмпирическое правило - использовать MVC для большинства веб-сайтов из-за того, что сеть не имеет состояния. Если вы не пытаетесь предоставить очень богатый веб-интерфейс и привнести Silverlight, вам следует использовать MVVM. XAML идет рука об руку с MVVM и также может быть вашим разумным выбором клиента (или хорошим шаблоном MVCP).
Истинный MVC практически невозможно поддерживать в любых других обстоятельствах из-за того, что контроллеры должны обрабатывать весь ввод. В большинстве не веб-архитектуры есть элементы управления, которые предоставят вам это. Фактически, большинство говорят, что ASP.NET MVC в любом случае является гибридным MVC, но, по моему опыту, это очень хорошо.