Разрешение среды выполнения контейнера IOC - PullRequest
1 голос
/ 15 сентября 2010

Я пытаюсь найти контейнер IOC, который позволит мне отображать данные для поля, хранящегося в базе данных, и разрешить интерфейс или объект, который необходимо разрешить с помощью строкового значения, извлеченного из базы данных.

Большинство примеров, которые я видел, используют интерфейсы, жестко запрограммированные в коде, я хочу, чтобы интерфейс, который должен быть разрешен, был динамичным.

Это то, что я обычно вижу:

var taskController = container.Resolve<ITaskController>();

Это то, что я хотел бы видеть:

var strTaskController = "ITaskController";
var taskController = container.Resolve(strTaskController);

Я уверен, что смогу просмотреть документациюдля всех контейнеров МОК, но я надеюсь, что это простой вопрос для человека с большим опытом работы с МОК.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2010

Используя Unity , вы можете делать то, что ищете.По сути, если вы знаете полное имя типа, вы можете сначала сделать это:

var type = Type.GetType("Fully.Qualified.Type.Name");
var resolvedInstance = container.Resolve(type);

РЕДАКТИРОВАТЬ: Основываясь на комментарии, вот другой подход:

string typeName = "MyTypeName";
var type = container.Registrations.FirstOrDefault(r => r.RegisteredType.Name == typeName);
if(type != null)
{
    var resolvedInstance = container.Resolve(type.RegisteredType);
}
0 голосов
/ 12 мая 2011

Я думаю, что это тот ответ, с которым я собираюсь .. Управляемая расширяемая структура

0 голосов
/ 15 сентября 2010

Вы можете использовать контейнер IOC из проекта Castle .

...