什么是单例服务实例化?

时间:2017-09-15 00:43:19

标签: c# asp.net-core

鉴于以下服务注册:

services.AddSingleton<IMyInterface>(svc => new MyConcreteTpye(svc.GetService<MyEntityFrameworkContext>(), Configuration["Data"]));

我希望自动创建MyConcreteType实例,但事实并非如此。永远不会调用构造函数。

为什么我需要做这样的事情才能创建实例?

app.ApplicationServices.GetRequiredService<IMyInterface>();

该服务是一个监听器,因此不会在任何地方显式调用它。这是服务的错误用法吗?

1 个答案:

答案 0 :(得分:1)

我认为注册到services的服务应该在某处明确调用,在您的情况下可能不是一个好的选择。

如果你的服务&#34;是独立运行,也许你可以这样做:

public class Startup
{
    private IMyInterface _myService;

    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        _myService = new MyConcreteTpye(app.ApplicationServices.GetService<MyEntityFrameworkContext>(), Configuration["Data"]);
    }
}