我最近一直使用微软的ServiceCollection作为DI容器,但我注意到它不支持解析。我检查了所有的方法,但是没有任何地方显示它支持解析。
我需要解析我用接口创建的单个实例,以便在它创建的范围之外的其他地方使用该实例。这有什么原因吗?这是为了财产注入我需要它。
发布于 2018-08-16 19:02:37
服务集合用于收集和注册所有服务。从这里开始,您可以从集合中构建服务提供程序,以解决所需的服务。
var services = new ServiceCollection();
services.AddSingleton<IService, Service>();
//...add other services
IServiceProvider serviceProvider = services.BuildServiceProvider();
IService service = serviceProvider.GetService<IService>();如果您希望能够通过属性注入将一个服务分配给另一个服务,那么可以利用工厂委托作为参数访问提供者。
例如
services.AddTransient<IProvider>(sp => new Provider() {
ServiceProperty = sp.GetService<IService>()
});在解析IProvider时,将调用延迟的工厂委托,并根据需要使用提供程序注入依赖关系。
发布于 2018-08-16 20:11:20
您可以尝试使用下面的服务集合扩展,可以在微软文档上找到
// 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());
}https://stackoverflow.com/questions/51883234
复制相似问题