2013-03-16 5 views
6

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 WcfBarServiceJak 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ąć?

+1

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

+1

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

Odpowiedz

0

Ok, więc wydaje się, że jedyną osobą, która byłaby w stanie mi odpowiedzieć, był mnie, na podstawie przemyślenia i "przeprojektowania" rozwiązania, tak aby problem nie istniał w pierwszej kolejności.

Mam teraz zdolny sposób hostowania tych usług i utrzymywania IoC z StructureMap na jedną usługę, bez żadnych sprzecznych obaw.

Jeśli znajdziesz się w podobnej sytuacji z SOA przejęcia (SOATO?) - robiąc krok do tyłu, to dobry początek;) usługi

+0

Jakie było rozwiązanie ponownie architekturowane? – Wiz

Powiązane problemy