首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Autofac时,如何在ASP.NET核心中解析特定的键控服务?

使用Autofac时,如何在ASP.NET核心中解析特定的键控服务?
EN

Stack Overflow用户
提问于 2018-08-20 08:51:52
回答 1查看 831关注 0票数 4

我在简单的ASP.NET核心web API中创建的,假设我有一个界面,如下所示:

代码语言:javascript
复制
public interface ITestService
{
    string GetDate();
}

我使用Autofac来处理DI,对于上面的接口,我有两个注册类型(实现ITestService的TestService和TestComponent ):

代码语言:javascript
复制
builder.RegisterType<TestService>().As<ITestService>().Keyed<ITestService>("service");
builder.RegisterType<TestComponent>().As<ITestService>().Keyed<ITestService>("component");

我知道我可以注册我的类型来使用这两种绑定中的任何一种,而且我知道有一种方法可以获得所讨论的here中的正确类型。

代码语言:javascript
复制
var services = serviceProvider.GetServices<ITestService>();
var testComponent= services.First(o => o.GetType() == typeof(TestComponent));

由于我正在使用Autofac并使用键控服务注册了我的类型,那么如何使用IServiceProvider和我在绑定中提供的键(“ITestService”或"component")来解析正确的组件呢?

EN

回答 1

Stack Overflow用户

发布于 2018-08-20 16:03:35

根据documentation的说法,还有两种更干净的方法来解决键控服务。您可以使用索引进行解析:

代码语言:javascript
复制
public class TestServiceConsumer
{
    private ITestService testService;    

    public TestServiceConsumer(IIndex<string, ITestService> testServices)
    {
        testService = testServices["service"];
    }
}

也可以使用属性(它似乎更适合您的情况):

代码语言:javascript
复制
public class TestServiceConsumer
{
    private ITestService testService;    

    public TestServiceConsumer([KeyFilter("service")] ITestService testService)
    {
        this.testService = testService;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51922958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档