私はASP.NET Core Webプロジェクトとは別に、1つのプロジェクト(Infrastructure)にすべてのEFコアファイルを含むVisual Studioでソリューションを設定しようとしています。さらに、開発者がInfrastructureプロジェクトのタイプを誤って使用しないようにするため、WebからInfrastructureへの参照を避けようとしています。StructureMapレジストリを使用して個別のプロジェクトでEFコアを設定する方法
public IServiceProvider ConfigureServices(IServiceCollection services)
{
string dbName = Guid.NewGuid().ToString();
services.AddDbContext<AppDbContext>(options =>
options.UseInMemoryDatabase(dbName));
services.AddMvc()
.AddControllersAsServices();
// use StructureMap
var container = new Container();
container.Configure(config =>
{
config.Scan(_ =>
{
_.AssembliesAndExecutablesFromApplicationBaseDirectory();
_.WithDefaultConventions();
_.LookForRegistries();
});
config.Populate(services);
});
return container.GetInstance<IServiceProvider>();
}
:
https://ardalis.com/avoid-referencing-infrastructure-in-visual-studio-solutions
は、ASP.NETコアでは、しかし、我々は()メソッドWebプロジェクトのStartup.ConfigureServicesにEFコアを設定します。ここで説明するように、これは簡単にASP.NET 5/EF 6で行われます
AddDbContext
ロジックをStartup
から私のInfrastructureプロジェクトに移動する方法はありますか?私はすでにインフラプロジェクトでのStructureMapレジストリを持っているので、そこから必要なサービスを配線する方法があるならば、それはそのプロジェクトでありますので、DbContextの種類にアクセスする必要があります。
public class InfrastructureRegistry : Registry
{
public InfrastructureRegistry()
{
For(typeof(IRepository<>)).Add(typeof(EfRepository<>));
}
}
あなたが見ることができます https://github.com/ardalis/cleanarchitecture/tree/ardalis/projectref
私の目標は、WebからInfrastructureへのプロジェクト参照を削除することですが、起動時にソリューションにAppDbContextをロードすることができます。