Я написал резольвер, поэтому у меня может быть очень примитивная структура DI. В рамках я допускаю, чтобы зависимый преобразователь указывал, какие типы по умолчанию загружаются, если ничего не указано или не зарегистрировано.Каков наилучший способ решения объекта?
Однако способ загрузки по умолчанию меня удивил. Я не уверен, что делаю так, как это можно сделать.
Пример:
T LoadDefaultForType<T>()
{
T _result = default(T);
if (typeof(T) == typeof(ISomeThing)
{
result = new SomeThing();
}
... more of the same
else
{
throw new NotSupportException("Give me something I can work with!");
}
return _result;
}
Update
Использование этого было бы получить объект по умолчанию для данного интерфейса в том случае, если модуль или узел не сконфигурирован интерфейс с бетонного типа.
Так, например:
IoC.Resolve<ISomeThing>();
должен был бы вернуться ко мне объект-то, если ничего другого не было зарегистрировано в ISomeThing. LoadDefaultForType в этом случае является последним попыткой использовать по умолчанию (в этом случае независимо от моей модели домена).
Решимость может пролить некоторый свет на это, а также:
T Resolve<T>()
{
T _result = default(T);
if (ContainedObjects.ContainsKey(typeof(T))
_result = (T)ContainedObjects[typeof(T)];
else
_result = LoadDefaultForType<T>();
return _result;
}
Есть мысли? Есть ли лучший способ загрузить типы по умолчанию, учитывая, что я пытаюсь разрешить подход, основанный на соглашениях о переходе?
Мне очень нравится ваша идея атрибута. Я думаю, что это может быть дорога. – Joseph
И с соглашением об именовании, которое хорошо привязалось бы к «конвенции/конфигурации». – GalacticCowboy