В настоящее время у нас есть 2 веб-приложения, один из которых является лицом, обращенным к клиенту, а другой - административным бэкэнд-приложением. Мы заметили, что большое количество дубликатов между двумя приложениями дублируется. Пример, установка RavenDb. Например оба приложения имеют этот код в asp.net global.asaxПовторное использование регистраций с установщиками Castle Windsor?
container.Register(
Component.For<IDocumentStore>()
.UsingFactoryMethod(x =>
{
var docStore = new DocumentStore { ConnectionStringName = "RavenDB" };
docStore.Initialize();
return docStore;
}).LifestyleSingleton()
);
Мы реструктурировать этот код из в инсталлятор и поместили его в сборке под названием CastleWindsor.RavenDbInstaller, который можно ссылаться и повторно обоими приложениями.
public class RavenDbInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IDocumentStore>()
.UsingFactoryMethod(x =>
{
var docStore = new DocumentStore { ConnectionStringName = "RavenDB" };
docStore.Initialize();
return docStore;
}).LifestyleSingleton()
);
}
}
Все это хорошо, но это рекомендуемый подход к повторному использованию регистрации логики между приложениями ??
Кроме того, что происходит, когда установщик в отдельной сборке имеет зависимость от другого класса. Как это должно быть обработано. Например, что, если моя строка соединения ravendb не должна быть жестко запрограммирована и должна быть присоединена к классу ApplicationConfiguration. Как я могу справиться с этой зависимостью в отношении моей сборки CastleWindsor.RavenDbInstaller и содержащегося в ней класса установщика?
public class RavenDbInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IDocumentStore>()
.UsingFactoryMethod((c, y) =>
{
var connectionStringName = c.Resolve<IApplicationConfiguration>().ConnectionStringName; // <---- How do i deal with this dependency?
var docStore = new DocumentStore { ConnectionStringName = connectionStringName };
docStore.Initialize();
return docStore;
}).LifestyleSingleton()
);
}
}
Вы нашли удовлетворительное решение вашей проблемы? – samy