Я делал нечто подобное раньше и использовал подход, очень похожий на тот, который предложил Фабиано.
Пример конфигурации:
...
...
Теперь немного обобщенного примера кода с использованием WebApplicationContext:
IApplicationContext context = new XmlApplicationContext(locations);
IClass c = (IClass)context.GetObject(declarationId);
Следует отметить несколько вещей:
- Передайте id объявления, которое вы хотите использовать, а не Имя типа , поэтому переменная объявлениеId будет иметь значение либо "ClassAInstance" или "ClassBInstance".
- Конструктор для XmlApplicationContext (и WebApplicationContext) принимает параметр массива строковых значений; переменная location будет массивом ресурсов конфигурации для поиска, чтобы найти объект с идентификатором объявление ID . Вы не можете использовать универсальный список здесь, это должен быть фактический строковый массив.
Одним интересным следствием пункта 2 выше является то, что вы фактически контролируете, какие ресурсы конфигурации знает ваш ApplicationContext: когда вы вызываете метод GetObject (), ApplicationContext будет искать ваш объект только в пределах ресурсов конфигурации, указанных в массиве места [] . Это означает, что вместо перечисления всех возможных конфигураций в одном файле с уникальным идентификатором у вас может быть несколько ресурсов конфигурации, каждый из которых содержит одно объявление объекта и каждый с одинаковым идентификатором:
Config1.xml: ...
Config2.xml: ...
Но при создании экземпляра объекта вы можете контролировать, какой объект создается не на основе объявление ID , которое в обоих случаях будет "IClassInstance", но путем изменения местоположения [] массив для хранения ресурса конфигурации, который вы хотите использовать, в данном случае либо Config1.xml, либо Config2.xml
Надеюсь, что это полезно,
Andrew