1

Autofac の初心者として、リポジトリをコントローラに登録する方法を見つけようとしています。リポジトリは、そのコンストラクターで Web サービスを受け取り、サーバーと通信します。このアプリケーションはマルチテナントであり、テナント名は MVC ルート データでアクセスされます。ほとんどの例のように global.asax 内のルート データにアクセスできないため、この依存関係をどこに挿入すればよいでしょうか。コードはどのようになりますか?

4

1 に答える 1

1

Autofac.Features.Indexed.IIndex<K, V>実装へのキーのマッピングを作成できるタイプを試してください。

public enum RepositoryWebServices { ServiceA, ServiceB, ServiceC }

builder.RegisterType<MyServiceA>().Keyed<IWebService>(RepositoryWebServices.ServiceA);
builder.RegisterType<MyServiceB>().Keyed<IWebService>(RepositoryWebServices.ServiceB);
builder.RegisterType<MyServiceC>().Keyed<IWebService>(RepositoryWebServices.ServiceC );

public MyRepository : IRepository
{
  IIndex<RepositoryWebServices, IWebService> _webServices;

  public MyRepository(IIndex<RepositoryWebServices, IWebService> webServices)
  {
    _webServices = webServices;
  }

  public UseWebService(string tenant)
  {
    IWebService webService = _webServices[(RepositoryWebServices)Enum.Parse(typeof(RepositoryWebServices), tenant)];

    // use webService
  }
}
于 2010-08-26T23:15:52.940 に答える