У меня есть следующий заводской метод, который просто возвращает правильную реализацию базы данных. Я хотел бы реорганизовать это на свой контейнер SimpleInjector, но не знаю, как это сделать.Как реорганизовать этот метод фабрики?
public class DALFactory
{
public static IDatabase GetDAL()
{
string asm = "SQL"; /* Hardcoded choice of DAL */
if (asm == "XML")
return new XmlDatabase();
if (asm == "SQL")
return new SqlDatabase();
return null;
}
}
Я пытался понять, как я могу зарегистрировать коллекцию, но как я должен сказать SimpleInjector какой использовать при запросе экземпляра IDatabase в моей программе? Открыта для любых идей. Просто теоретическая программа, которую я пытаюсь реорганизовать для практики. Используя DI (IoC) в первый раз, это был такой приятный, открывающий глаза опыт до сих пор!
Я пробовал это сделать, я закрыл?
Container.RegisterCollection<IDatabase>(new [] { typeof(SqlDatabase), typeof(XmlDatabase)});
Container.Register<IDatabase, XmlDatabase>(Lifestyle.Singleton);
Container.Register<IDatabase, SqlDatabase>(Lifestyle.Singleton);
К сожалению, я такой новичок. Я регистрирую кучу вещей в своем классе контейнеров, но забыл признать, что на самом деле я являюсь классом C# и не ограничиваюсь только моими методами контейнеров-библиотек, я могу просто поставить свою собственную логику. Ответ такой простой, я чувствую себя таким немым сейчас. Спасибо!!! – Amivit
Если бы я хотел сделать его более проверяемым, вместо этого уродливого жесткого кодирования, какое альтернативное решение вы могли бы порекомендовать? Таким образом, база данных также может быть макетной. Просто добавьте третий вариант в мой hardcoded if loop или есть лучший подход? – Amivit
@Amivit. Это касается модульного тестирования, ответ совершенно другой. Для модульного тестирования вы вообще не используете Container ** **. Вы создаете класс для проверки вручную. – Steven