web-dev-qa-db-ja.com

「MyService」をアクティブにしようとしたときに、タイプ「System.String」のサービスを解決できません

Service Fabric Stateless ASP.NET Coreアプリで次の例外が発生しています。

System.InvalidOperationException: Unable to resolve service for type 'System.String' while attempting to activate 'MyService'.
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.PopulateCallSites(ServiceProvider provider, ISet`1 callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.CreateCallSite(ServiceProvider provider, ISet`1 callSiteChain)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetResolveCallSite(IService service, ISet`1 callSiteChain)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetServiceCallSite(Type serviceType, ISet`1 callSiteChain)

どうすれば解決できないSystem.String?これをさらにデバッグするにはどうすればよいですか?

13
spottedmahn

Asp.Net CoreのデフォルトのDIフレームワークでは、使用可能な機能が制限されています。次のようなクラスコンストラクターを想定

public MyService(string dependencyString) {
    //...
}

コンテナは、依存文字列に使用する値をサービスに注入する方法を知ることができません。

上記の場合、不足しているstringは、サービスをコレクションに追加するときにオーバーロードの1つを使用して提供できます。

//...

services.AddScoped<IMyService>(_ => new MyService("value here"));

//...

そのようにして、サービスがアクティブ化されているときに適切に返されます。


ドキュメントリファレンス: ASP.NET Coreでの依存性注入 -> コンストラクター注入動作(v2.1)

21
Nkosi