1

作为 Autofac 的新手,我试图弄清楚如何为我的控制器注册我的存储库。Repository 在其构造函数中使用一个 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 回答