Я делаю приложение, которое поддерживает несколько баз данных. Архитектура пива создаёт правильный класс у правильного поставщика, используя синглтон ниже.Database Factory Design
static private ArticlesProvider _instance = null;
static public ArticlesProvider Instance
{
get
{
if (_instance == null)
_instance = (ArticlesProvider)Activator.CreateInstance(
Type.GetType(Globals.Settings.Articles.ProviderType));
return _instance;
}
}
У меня есть ProviderType хранящегося в пользовательском раздел в моем web.config
и пытаюсь создать завод, который инстанцирует правильный класс DAL на основании установленного поставщика.
Вышеупомянутое в настоящее время занимает все пространство имен, хранящееся в web.config
, соответствующему классу DAL и немного ограничено, поскольку оно создает только экземпляры ArticlesProvider
. Как я могу создать общий завод, поэтому я могу передать в качестве провайдера , например SqlServer, и любой класс , например ArticleDAL, который я хочу создать?
Заранее спасибо.
Привет Джеймс, ninject выглядит интересно, единственное, что я все еще изучаю .Net так интересно, будет ли кривая обучения немного крутой. – gdp
У меня есть более пристальный взгляд на ninject, я понимаю концепцию DI и думаю, что я понимаю, как использовать инъекцию setter внутри моих страниц/классов. Однако мне любопытно, где бы я его разворачивал, в настоящее время у меня есть 3 слоя UI, BL, DAL и думал о бизнес-уровне. Это верно? – gdp
geppie - вы можете использовать его во всех слоях. Например, в MVC-приложениях обычно генерировать контроллеры с использованием DI, чтобы вы могли автоматически вводить параметры конструктора - например, ссылку на ваш BL. В вашем репозитории вы можете вводить ссылки на ваш DAL. Подумайте об этом как о способе разбить зависимости внутри слоев, но также и между слоями. Скорее всего, это сложная идея, с которой вы сначала справляетесь - но по мере знакомства с ней вы должны увидеть, что она работает на многих уровнях. После того, как вы начнете думать об модульном тестировании, это станет бесценным. –