質問: 私は、Razorページを使用して新しいasp.netコアWebアプリケーションを作成しようとしています。 startup.csファイルにdbコンテキストを追加したいのですが、IDesignという名前のものを使用しています。 私のDbContextエンティティは、私が参照することができないプロジェクトにあります。私は何らかの形でアクセサーレイヤーやその他のもののいずれかにコンテキストを追加する必要があります。私はサービスが.netコアのためにどのように働くかに精通していません。 私はこのように設定された解決策を持っています: 1. クライアントプロジェクト 1. cshtmlファイル、startupcs、そしてそのすべてがあるプロジェクトはここにあります 2. マネージャとユーティリティのプロジェクトのみ参照できます 2. マネージャープロジェクト 1. 高いレベルでタスクを達成するためにエンジン/アクセサへの呼び出しを連鎖させるために使用されます。 2. アクセサへの呼び出しに使用 3. アクセサ、エンジン、およびユーティリティプロジェクトのみを参照できる 3. エンジンプロジェクト 1. ビジネスロジックに使用 2. アクセサープロジェクトとユーティリティプロジェクトのみを参照できます 4. アクセサリープロジェクト 1. リソースアクセッサ。ヒットdbs /サービス。 2. これは私のdbcontextクラスが生きる場所です 3. ユーティリティ以外のものは参照できません 5. ユーティリティプロジェクト 1. すべてのプロジェクトに適用されるグローバルクラスおよびユーティリティ関数を格納するために使用されます。 2. 何も参照できません 私の問題は、DbContextがアクセサープロジェクトに存在する場合、クライアントから使用できるように、マネージャからそれを渡すにはどうすればいいですか?誰もこれまでに経験がありましたか? もう一度言いますと、クライアントプロジェクトでアクセサープロジェクトを簡単に参照し、そこからdbcontextを使用できることはわかっています。私の問題は、このコードを使って作業している他の人がアクセサークラスを見ることができないようにアクセサを参照できないようにしたいということです。
回答: だから、私はこのガイドに従うことでこれを達成できました: https : //asp.net-hacker.rocks/2017/03/06/using-dependency-injection-in-multiple-projects.html クライアントからすべてのサービスを追加する代わりに、拡張クラスを使用してマネージャから追加し、その拡張メソッドをクライアントから呼び出すことができました。 クライアントコード: ``` public void ConfigureServices(IServiceCollection services) { services.AddManagerDependencyInjection(); services.AddGroupManagementDbContext(); // etc... } ``` マネージャーコード: ``` public static class IServiceCollectionExtension { public static IServiceCollection AddManagerDependencyInjection(this IServiceCollection services) { services.AddTransient(); return services; } public static IServiceCollection AddDbContext(this IServiceCollection services) { var connection = @"Server=(localdb)\mssqllocaldb;Database=DbName;Trusted_Connection=True;ConnectRetryCount=0"; services.AddDbContext( options => options.UseSqlServer(connection)); return services; } } ```