В последние два дня я изо всех сил старался что-то узнать о StructureMap, используя мой старый проект в качестве конкретного примера реализации.Я постарался максимально упростить свой вопрос.Хотя я буду публиковать свои примеры на vb.net, ответы с примерами на C # также хороши.
Проект включает интерфейсы, называемые IDatabase, которые подключаются к базе данных.Важная часть выглядит следующим образом.
Public Interface IDatabase
Function Connect(ByVal ConnectionSettings As ConnectionSettings) As Boolean
ReadOnly Property ConnectionOpen As Boolean
[... more functions...]
End Interface
Public Class MSSQLConnection
Implements IDatabase
Public Function Connect(ByVal ConnectionSettings As ConnectionSettings) As Boolean Implements IDatabase.Connect
[... Implementation ...]
End Function
[... more implementations...]
End Class
ConnectionSettings - это структура, содержащая всю информацию, необходимую для подключения к базе данных.
Я хочу один раз открыть соединение с базой данных и использовать его длякаждое соединение в проекте, поэтому я регистрирую экземпляр в ObjectFactory.
dim foo = ObjectFactory.GetInstance(Of MSSQLConnection)()
dim bar as ConnectionSettings
foo.connect(bar)
ObjectFactory.Configure(Sub(x) x.For(Of IDatabase).Use(foo))
До этой части все работало как шарм.Теперь я дошел до того, что у меня есть классы, которым нужен дополнительный экземпляр IDatabase, потому что они подключаются ко второй базе данных.
Public Class ExampleClass
Public Sub New(ByVal SameOldDatabase as IDatabase, ByVal NewDatabase as IDatabase)
[...] Magic happens here [...]
End Sub
End Class
Я хочу, чтобы эта вторая база данных вела себя так же, как и первая.Я хочу, чтобы он использовал конкретный единственный экземпляр и хотел подключить его к другой базе данных, вызывая Connect с другими ConnectionSettings.
Проблема заключается в следующем: хотя я почти уверен, что это каким-то образом возможно (моя первоначальная идеярегистрировал ExampleClass с альтернативными аргументами конструктора), я на самом деле хочу сделать это без регистрации ExampleClass.Вероятно, это требует больше настроек, но я понятия не имею, как это сделать.
Итак, в основном, все сводится к следующему вопросу: как мне сконфигурировать ObjectFactory таким образом, чтобы автопроводка всегда вызывала конструктор собъект Database1 для первого параметра IDatabase и объект Database2 для второго (если он есть?)