Dotnetコア2.0に付属するIServiceCollectionを使用して簡単な依存性注入をセットアップしようとしています。Microsoft.Extensions.DependencyInjection nugetパッケージ。ServiceCollectionを使用したdotnet core 2.0コンソールアプリケーションの循環依存性
のSystem.InvalidOperationExceptionを::
はpublic interface IService { } public class JobService : IService { public IService m_service { get; set; } public JobService(IService service) { m_service = service; } } class Program { static void Main(string[] args) { IServiceCollection serviceCollection = new ServiceCollection(); ConfigureService(serviceCollection); var serviceProvider = serviceCollection.BuildServiceProvider(); //exception on next line var service = serviceProvider.GetService<App>(); Console.WriteLine("Hello World!"); } private static void ConfigureService(IServiceCollection serviceCollection) { serviceCollection.AddTransient<IService, JobService>(); serviceCollection.AddTransient<App>(); } }
上記の容器ではなく、実行時に、私が得るすべてのタイプを登録する必要があります:それはので、私は小さな実験を始めに、私は新しいです「循環依存関係'TestCore.IService'タイプのサービスで検出されました。 '
私の実装には循環依存性はありません。誰かがこの循環依存がどこから来るかを指摘できますか?サービスとしては、それは、このアプリケーションクラスに注入されなければならない
私が作っ:
public class App
{
private IService m_service;
public App(IService service)
{
m_service = service;
}
}
いいえ、それは問題ではありません。 OPのIServiceとJobServiceのコードはそのままコンパイルされます。 – Enigmativity
OPが取得しているのはコンパイルエラーではありません。試してみてください。実行時にエラーが発生します。 – CalC
DIは 'JobService'を' JobService'のコンストラクタに挿入しようとしていますか? – Enigmativity