mam około 6 usług WCF że chcą gościć w aplikacji MVC, routing żądania do /services/foo
do WcfFooService
i /services/bar
do WcfBarService
Jak mogę obsługiwać wiele usług WCF opartych na IoC w MVC?
mogę osiągnąć IoC z StructureMap zasięgu usług i wstrzyknąć mój zależności konstruktora za pomocą przykładu, który Jimmy Bogard napisał na blogu około here:
Artykuł Jimmy'ego jest świetny, ale staram się go rozszerzyć do pracy z rvices hostowane w ramach tej samej aplikacji MVC. Zasadniczo, część na dole jest część, która powoduje mi kilka głowy:
public class StructureMapServiceHostFactory : ServiceHostFactory
{
public StructureMapServiceHostFactory()
{
ObjectFactory.Initialize(x => x.AddRegistry<FooRegistry>());
//var iTriedThisToo = ObjectFactory.Container;
//container.Configure(x => x.[etc]);
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new StructureMapServiceHost(serviceType, baseAddresses);
}
}
Z usługi pojedynczy WCF - routingu żądań MVC do określonego adresu URL poprzez StructureMapServiceHostFactory pokazano powyżej działa znakomicie - ale - Jeśli (na przykład) utworzę StructureMapServiceHostFactory2
dla wywołania /services/bar
, aby umożliwić użycie innego Rejestru, gdy aplikacja MVC obraca się, wydaje się, że wywołuje każdą fabrykę po kolei, gdy przechodzi przez RouteConfig.cs i dodaje trasy, więc ostatecznie nie mam skonfigurowanych instancji, które powinien dostarczyć pierwszy ServiceHostFactory.
Nie ma znaczenia, jeśli zadzwonię pod numer Initialize();
lub spróbuję pobrać właściwość Container
i zadzwonić pod numer Configure
.
Czy ukrywam się przed tym w niczym? Główną przyczyną wymagającą wyodrębnienia rejestru jest inna konfiguracja NHibernate, ale I może skonfigurować nazwane instancje SessionFactory i Session for NHibernate, a następnie użyć pojedynczego rejestru, aby ominąć to. Moim zdaniem chciałem, aby usługa WCF i hosting MVC były w stanie używać swoich własnych kontenerów IoC w izolacji, dlatego poszedłem tą drogą.
Czy jest jakiś sposób, aby to osiągnąć?
6 WCF? Łał! Mam nadzieję, że używasz komunikacji opartej na wiadomościach z tymi usługami WCF (jak wyjaśnia [ten artykuł] (http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=95), w przeciwnym razie prawdopodobnie będzie dość bolesny. – Steven
Interesujący artykuł Steven! Dzięki za dzielenie się, na pewno moglibyśmy zrobić z tak elegancką architekturą. Może to również być pomocne dla tego, czego potrzebuję .... sprawi, że przyjrzymy się bliżej – SpaceBison