2012-04-03 16 views
1

フォーク、 私は、レガシーブラウンフィールドアプリケーションを、ドメイン変更用のコマンドとコマンドバスを備えたCQRSアーキテクチャに再要因化しようとしています。Unityを使用してコマンドハンドラ/バスを実装するのに手助けが必要です

アプリケーションはAsp.Net MVC3に実装されている可能性があります。私の雇用主は、MVCアプリケーションでのDIのためのUnityの使用を好む。

コマンド/バス解決の依存関係コンテナを示す例は、StructuremapまたはAutofacに基づいていますが、この実装ではUnityを使用する必要があります。誰かがUnityをこの方法で使用したか、または例を知っていますか?

+0

これはおそらくUnityで達成するのが非常に難しいでしょう。こちらをご覧ください:http://stackoverflow.com/questions/9813630/how-to-do-open-generic-decorator-chaining-with-unity-unityautoregistration – Steven

答えて

1

正確にコンテナが必要だと思いますか?おそらくthis postにはいくつかの有用な情報が含まれています。

これは、コンマンドを処理するコンテナにとらわれない方法を説明しています。


更新

あなたはこのような何かがしたい意味:登録はのStructureMapのの機能の多くを提供Unityのためのカスタム設定エンジンを使用していることを

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); 

をconfig。


アップデート2

コードサンプルは、私のpet project on codeplexの一部です。上記のスニペットは、TecX.Unity.Configuration.Testプロジェクトの中にあります。

+0

Mark Seemannの記事では、メッセージディスパッチアーキテクチャを構築する方法を明確に示していますが、サービスロケータのアンチパターンを防ぐ方法は、それ自体非常に面白く、コンテナを使用せずにこれを示しています。これはおそらくOPを助けません。 'ICommandHandler 'や 'IEventHandler 'のようなジェネリックインターフェースの周りに設計されたアプリケーションで作業するとき、コンテナなしでコンポジションルートを維持可能に保つことはほとんど不可能です。手作業による配線はあまりにも痛いだけです。したがって、OPの質問は残っています:どのようにUnityでこれを行うには? – Steven

+0

@Sebastian私はコマンドとコマンドハンドラを結び付けるための簡単で管理しやすい方法を探しています。シンプルな同期バスはおそらく行く方法でしょうが、NServiceBusのような私の実装では、私の必要が過大です。 – mikelus

+0

@スティーブン私の更新をご覧ください。 Btw:OPの意味は? –

関連する問題