Generalnie jestem takim programistą z doskoku, który wskoczył na to stanowisko w ramach awansu w strukturze organizacyjnej firmy i wszystkiego co się uczę to głównie już na istniejących przykładach. Rzadko mam okazję poznać tajniki konfiguracji danego projektu gdyż najczęściej słyszę "powiel to co już skonfigurowane i rób tak aby zdążyć w określonym czasie".
Można tak pracować, ale nie lubię być nieświadomy tego z czym niektóre rzeczy się biorą.
Do tej pory do wstrzykiwania klas implementujących danych interfejs używałem już skonfigurowanego w projektach Windsora.
Jak chciałem dodać jakąś zależność, którą chciałem wykorzystać to w odpowiedniej klasie po prostu dodawałem np.:
container.Register(Component.For<DbContext>()
.ImplementedBy<IdbContext>()
.LifestylePerWcfOperation());
Mam konkretne pytania:
- Czym jest kontener? Jak to łopatologicznie rozgryźć?
- Czemu niektóre interfejsy w projekcie są wstrzykiwane w ramach jednego kontenera, a w innym przypadku każdy interfejs to rejestracja oddzielnego kontenera?
Np.
//Interfejsy w ramach jednego kontenera
public class ServicesInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container)
{
container
.Register(
Component.For<IFirstService>()
.ImplementedBy<FirstService>()
.LifeStyle.PerWcfOperation()
)
.Register(
Component.For<ISecondService>()
.ImplementedBy<SecondService>()
.LifeStyle.PerWcfOperation()
)
.Register(
Component.For<IThirdService>()
.ImplementedBy<ThirdService>()
.LifeStyle.PerWcfOperation()
)
}
}
//Każdy interfejs w innym kontenerze
public class DataInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<DbContext>()
.ImplementedBy<IdbContext>()
.LifestylePerWcfOperation());
container.Register(Component.For<IDbContextAdapter>()
.ImplementedBy<DbContextAdapter>()
.LifestylePerWcfOperation());
container.Register(Component.For<ITransactionFactory>()
.ImplementedBy<TransactionFactory>()
.LifestylePerWcfOperation());
container.Register(Component.For<ISpExecutor>()
.ImplementedBy<SpExecutor>()
.LifestylePerWcfOperation());
}
}
- W niektórych klasach Windsora spotykam też AddFacility(). Do czego to służy?