首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从与微软的ServiceCollection接口解析类?

从与微软的ServiceCollection接口解析类?
EN

Stack Overflow用户
提问于 2018-08-16 18:24:35
回答 2查看 92关注 0票数 1

我最近一直使用微软的ServiceCollection作为DI容器,但我注意到它不支持解析。我检查了所有的方法,但是没有任何地方显示它支持解析。

我需要解析我用接口创建的单个实例,以便在它创建的范围之外的其他地方使用该实例。这有什么原因吗?这是为了财产注入我需要它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-16 19:02:37

服务集合用于收集和注册所有服务。从这里开始,您可以从集合中构建服务提供程序,以解决所需的服务。

代码语言:javascript
运行
复制
var services = new ServiceCollection();

services.AddSingleton<IService, Service>();

//...add other services

IServiceProvider serviceProvider = services.BuildServiceProvider();

IService service = serviceProvider.GetService<IService>();

如果您希望能够通过属性注入将一个服务分配给另一个服务,那么可以利用工厂委托作为参数访问提供者。

例如

代码语言:javascript
运行
复制
services.AddTransient<IProvider>(sp => new Provider() {
    ServiceProperty = sp.GetService<IService>()
});

在解析IProvider时,将调用延迟的工厂委托,并根据需要使用提供程序注入依赖关系。

票数 1
EN

Stack Overflow用户

发布于 2018-08-16 20:11:20

您可以尝试使用下面的服务集合扩展,可以在微软文档上找到

代码语言:javascript
运行
复制
// Services that implement IDisposable:
public class Service1 : IDisposable {}
public class Service2 : IDisposable {}
public class Service3 : IDisposable {}

public class SomeServiceImplementation : ISomeService, IDisposable {}

public void ConfigureServices(IServiceCollection services)
{
    // The container creates the following instances and disposes them automatically:
    services.AddScoped<Service1>();
    services.AddSingleton<Service2>();
    services.AddSingleton<ISomeService>(sp => new SomeServiceImplementation());


    // The container doesn't create the following instances, so it doesn't dispose of
    // the instances automatically:
    services.AddSingleton<Service3>(new Service3());
    services.AddSingleton(new Service3());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51883234

复制
相关文章

相似问题

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