0
給出下面的服務註冊:何時實例化單例服務?
services.AddSingleton<IMyInterface>(svc => new MyConcreteTpye(svc.GetService<MyEntityFrameworkContext>(), Configuration["Data"]));
我期望能夠自動創建MyConcreteType
實例,但事實並非如此。構造函數永遠不會被調用。
爲什麼我需要做這樣的事情,以便創建實例?
app.ApplicationServices.GetRequiredService<IMyInterface>();
該服務是一個監聽器,因此它不會在任何地方顯式調用。這是服務的錯誤用法嗎?
'爲什麼我需要做這樣的事情,這樣的實例被創建'因爲那是何等的依賴?注射一般有效。直到你要求它纔會創造出來。你不是說'請現在讓我做這件事'。你在說'如果稍後有人要求'IMyInterface',這裏是你應該如何創建它,以便你可以給它們'。 – mjwills
請考慮使用'AddSingleton(IServiceCollection,Type,Object)'代替 - https://docs.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.dependencyinjection.servicecollectionserviceextensions。這樣你明確地創建對象並將其傳入。 – mjwills
@mjwills如果你看到構造函數,我使用'IServiceProvider.GetService'方法,以便超載不起作用 –