2012-04-03 9 views
1

Leute, Ich versuche, eine Legacy-Brownfield-Anwendung in eine CQRS-Architektur mit Befehlen und einem Befehls-Bus für Domain-Modifikationen neu zu factor.Benötigen Sie Hilfe bei der Implementierung von Befehlshandlern/Bus mit Unity DI

Die Anwendung wird mehr als wahrscheinlich in Asp.Net MVC3 implementiert werden. Mein Arbeitgeber bevorzugt die Verwendung von Unity für DI in MVC-Anwendungen.

Alle Beispiele, die ich finden kann, die einen Abhängigkeitsbehälter für die Befehls-/Busauflösung zeigen, basieren auf Strukturkarte oder Autofac, jedoch muss ich in dieser Implementierung Unity verwenden. Hat jemand auf diese Weise Unity benutzt oder irgendwelche Beispiele kennengelernt?

+0

Dies wird wahrscheinlich mit Unity sehr schwer zu erreichen sein. Siehe hier: http://stackoverflow.com/questions/9813630/how-to-do-open-generic-decorator-chaining-with-unity-unityautoregistration – Steven

Antwort

1

Wo genau denken Sie, dass Sie den Container überhaupt brauchen? Vielleicht enthält this post einige nützliche Informationen.

Es beschreibt eine Container agnostic Art der Handhabung von commands.


aktualisieren

Sie meinen, Sie so etwas wie dieses haben möchte:

var builder = new ConfigurationBuilder(); 
var convention = new CommandHandlerConvention().WithTransaction().WithDeadlockRetry(); 
builder.Extension<DecoratorExtension>(); 
builder.Scan(x => 
{ 
    x.With(convention); 
    x.AssemblyContainingType(typeof(BarCommand)); 
}); 
var container = new UnityContainer(); 
container.AddExtension(builder); 
ICommandHandler<BarCommand> barHandler = container.Resolve<ICommandHandler<BarCommand>>("BarHandler"); 
var command = new BarCommand(); 
barHandler.Handle(command); 
Assert.AreEqual("-->Retry-->Transaction-->BarHandler", command.HandledBy); 

Diese Eintragung einer benutzerdefinierten Konfiguration Motor für die Einheit verwendet, die eine Menge der Funktionen von StructureMap des liefert Konfig.


Update2

Die Codebeispiele sind Teil meiner pet project on codeplex. Die obigen Snippets befinden sich im Projekt TecX.Unity.Configuration.Test.

+0

Obwohl Mark Seemanns Artikel deutlich zeigt, wie man eine Message-Dispatching-Architektur erstellt, zeigt Wie man das Service-Locator-Anti-Pattern verhindert, ist an sich schon sehr interessant und zeigt dies ohne einen Container zu benutzen, dies wird dem OP wahrscheinlich nicht helfen. Es ist fast unmöglich, den Kompositionswurzel ohne einen Container pflegbar zu halten, wenn man an einer Anwendung arbeitet, die um generische Interfaces wie "ICommandHandler " und "IEventHandler " aufgebaut ist. Die manuelle Verkabelung ist einfach zu schmerzhaft. Die OP-Frage bleibt also bestehen: Wie geht das mit Unity? – Steven

+0

@Sebastian Ich bin auf der Suche nach einer einfachen und überschaubaren Möglichkeit, Befehle und Befehlshandler zu verkabeln. Ein einfacher synchroner Bus wäre wahrscheinlich ein Weg, aber die Implementierungen, die ich gesehen habe, wie NServiceBus, sind meine Bedürfnisse übertrieben. – mikelus

+0

@Steven Bitte beachten Sie mein Update. Übrigens: Was bedeutet OP? –

Verwandte Themen