我有一个界面,例如ISomeService. ISomeService提供通用服务,但实现可能会有所不同。因此,它们将具有不同的依赖关系。
考虑:
interface ISomeService
{
     void DoSomething();
}
class SomeServiceA : ISomeService
{
     public SomeServiceA(DependencyOne one, DependencyTwo two)
     {
     }
     public void DoSomething()
     {
     }
}
class SomeServiceB : ISomeService
{
     public SomeServiceB(DependencyThree three)
     {
     }
     public void DoSomething()
     {
     }
}
现在,现实情况是我不能只是将 ISomeService 的依赖项添加到我的控制器并完成它。我需要根据用户告诉我的内容选择 IService 的实现,并且我可能必须创建他们选择的服务的多个副本。
也许我有一个类,可以让我按类型解析我需要的 ISomeService 的实例:
class SomeServiceProvider
{
    public T Get<T>()
        where T : ISomeService
    {
          // uh oh, this is starting to have a bad smell... do I call the container? that's no good
    }
}
所以,我可以
class SomeController
{
     SomeServiceProvider ServiceProvider { get; set; }
     public SomeController(ServiceProvider provider)
     { ServiceProvider = provider; }
     public void SomeAction(string serviceName)
     {
          ISomeService someService;
          if (serviceName.Equals('SomeServiceA')) someService = ServiceProvider.Get<SomeServiceA>();
          else someService = ServiceProvider.Get<SomeServiceB>();
          someService.DoSomething();
     }
}
似乎 Autofac 的委托工厂在这里不合适,我不知道该怎么做(除了使用服务定位器)。有什么建议吗?