我在简单的ASP.NET核心web API中创建的,假设我有一个界面,如下所示:
public interface ITestService
{
string GetDate();
}
我使用Autofac来处理DI,对于上面的接口,我有两个注册类型(实现ITestService的TestService和TestComponent ):
builder.RegisterType<TestService>().As<ITestService>().Keyed<ITestService>("service");
builder.RegisterType<TestComponent>().As<ITestService>().Keyed<ITestService>("component");
我知道我可以注册我的类型来使用这两种绑定中的任何一种,而且我知道有一种方法可以获得所讨论的here中的正确类型。
var services = serviceProvider.GetServices<ITestService>();
var testComponent= services.First(o => o.GetType() == typeof(TestComponent));
由于我正在使用Autofac并使用键控服务注册了我的类型,那么如何使用IServiceProvider和我在绑定中提供的键(“ITestService”或"component")来解析正确的组件呢?
发布于 2018-08-20 16:03:35
根据documentation的说法,还有两种更干净的方法来解决键控服务。您可以使用索引进行解析:
public class TestServiceConsumer
{
private ITestService testService;
public TestServiceConsumer(IIndex<string, ITestService> testServices)
{
testService = testServices["service"];
}
}
也可以使用属性(它似乎更适合您的情况):
public class TestServiceConsumer
{
private ITestService testService;
public TestServiceConsumer([KeyFilter("service")] ITestService testService)
{
this.testService = testService;
}
}
https://stackoverflow.com/questions/51922958
复制相似问题