2016-07-20 5 views
1

これをどのようにタイトル付けするかは不明でした。私は次のコードを持っています:複数の一般的な実装を表現する方が良い

builder.Register(context => 
{ 
    var bus = context.Resolve<IBus>(); 
    return bus.CreatePublishRequestClient<IGenerateProjectReport, IGenerateReportResult>(MessagingTimeout); 
}).As<IRequestClient<IGenerateProjectReport, IGenerateReportResult>>(); 

builder.Register(context => 
{ 
    var bus = context.Resolve<IBus>(); 
    return bus.CreatePublishRequestClient<IGenerateInstanceReport, IGenerateReportResult>(MessagingTimeout); 
}).As<IRequestClient<IGenerateInstanceReport, IGenerateReportResult>>(); 

builder.Register(context => 
{ 
    var bus = context.Resolve<IBus>(); 
    return bus.CreatePublishRequestClient<IGenerateInternalReport, IGenerateReportResult>(MessagingTimeout); 
}).As<IRequestClient<IGenerateInternalReport, IGenerateReportResult>>(); 

これを表現する良い方法はありますか?少し冗長だと思われる。

編集:私は別の登録サービスからファクトリメソッドを使用する必要があるため

私は私の知識にレジスタ汎用的な機能を使用することはできません。

+0

[Autofacに登録ジェネリック型](http://stackoverflow.com/questions/15226536/register-generic-type-with-autofac)の可能性の重複を – Igor

+0

@Igorそうではありません。私はその記事で説明されているパターンを使用しており、解決されたサービスからファクトリメソッドを呼び出すので、私の実装はあまり適切ではありません。 – chrisdrobison

+0

インタフェース契約を共有できますか?登録はいくつですか?タイプの制約に基づいてすべてのタイプを自動的に登録する必要がありますか? –

答えて

1

あなたのコンポーネントを登録するには、カスタム拡張メソッドを作成することができます。

私はどのようにあなたのタイプを知っていないと制約が設計されていますが、このような何かを入力します。次に

static class XXXRegistrationExtensions 
{ 
    public static IRegistrationBuilder<PublishRequestClient<TReport>, SimpleActivatorData, SingleRegistrationStyle> RegisterXXX<TReport, TReportResult>(this ContainerBuilder builder) 
     where TReport : IXXXReport 
     where TReportResult : IXXXReportResult<TReport> 
    { 
     var registration = builder.Register(context => 
     { 
      var bus = context.Resolve<IBus>(); 
      return bus.CreatePublishRequestClient<TReport, TReportResult>(); 
     }).As<IRequestClient<TReport, TReportResult>>(); 

     return registration; 
    } 
} 

、あなたがなりますあなたのタイプを登録することができ:

builder.RegisterXXX<IGenerateInternalReport, IGenerateReportResult>(); 
+0

これは理にかなっていますが、私はAutofacにこれを簡単にする仕組みがあるのか​​どうか疑問に思っていました。 – chrisdrobison

関連する問題