2011-02-01 7 views
0

私はMVCアプリケーションを構築しており、DependencyResolverを使用して別のcachecontext(使用するキャッシュに関する情報をラップする)を自分のリポジトリに送信する必要があります。渡すことができる10種類のキャッシュコンテキストがあります。現時点では、10種類の異なるインターフェイス(ICacheContexts)に対して10種類の登録を使用しています。これは機能しますが、この状況を処理する正しい方法のようには見えません。オブジェクト型が渡されるファクトリを作成する方法はありますか?返す正しいCacheContextを決定するだけで、1つの登録のみを維持することができますか?Autofac:DependencyResolverを使用してオブジェクトに異なるパラメータを解決する

現在のコード:

builder.Register(c => new CacheContext(AppConfig.AppBucketName, AppConfig.AppBucketpassword)) 
       .As<ICacheContextForApps>(); 
builder.Register(c => new CacheContext(AppConfig.AcctBucketName, AppConfig.AcctBucketpassword)) 
       .As<ICacheContextForAccounts>(); 
etc.. 

答えて

1

リポジトリ側からこれを実行する必要があります - リポジトリごとに、右のキャッシュコンテキストを解決するために、そのパラメータを設定します。例えば。

builder.Register(c => new CacheContext(...for appls...)) 
    .Named<ICacheContext>("apps"); 

builder.RegisterType<AppsRepository>() 
    .WithParameter((pi, c) => pi.ParameterType == typeof(ICacheContext), 
        (pi, c) => c.ResolveNamed<ICacheContext>("apps")); 

これが正しい軌道に乗ることを願っています。

+0

これは美しいものです。私はWithParameterを見ていたが、それが助けになるとは思わなかった。だから、AsImplementedAssembliesでRegisterAssemblyTypesを使用して、名前空間に基づいて適切なCacheContextにアセンブリを自動登録できるはずです。それは間違いなく私が取っていた道よりはるかにエレガントです。ありがとう! – AlexGad

+0

うれしいことです - はい、キャッシュコンテキストのNamed()部分とリポジトリ側のサービス名の選択は、必要に応じて規約を適用するように調整することができます。乾杯! –

関連する問題