私のdbcontextをweb api 2プロジェクトのサービスに挿入したいと思います。しかし、私はそれをどうやって行うのか少し不明です。私はドキュメントを読んだことがありますが、ライフサイクル、スコープ、要求、ネストされたコンテナ...彼らはすべて私に少しわかりません。私は、私の最善の理解から次のコードをまとめました。 NugetパッケージStructureMap.WebApi2をインストールした後、SMをv3からv4に、SM.MVC5をv3からv4に更新しました。StructureMapとWebApi2を使用してdbcontextを挿入する方法
次のコードは、http要求ごとに1つのdbcontextを使用したいという効果があるようです(スコープについては混乱しています)ので、同じdbcontextがすべてのサービスで共有されますユーザーのトランザクションを処理し、トランザクション(http要求)が閉じられたときに廃棄します。しかし、外見は必ずしも正しいとは限りません。
IoC.cs
public static IContainer Initialize()
{
var container = new Container(_ =>
{
_.AddRegistry<DefaultRegistry>();
_.ForConcreteType<MyDbContext>().Configure.ContainerScoped();
});
DomainEvents.Initialize(container);
return container;
}}
DefaultRegistry.cs:
public DefaultRegistry()
{
var mapperConfig = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new Common.Map.MapProfile());
cfg.CreateMissingTypeMaps = true;
});
var mapper = mapperConfig.CreateMapper();
For<IMapper>().Use(() => mapperConfig.CreateMapper());
For<MyDbContext>().Use(()=> new MyDbContext());
Scan(
scan =>
{
scan.AssemblyContainingType<ServiceBase>();
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.ConnectImplementationsToTypesClosing(typeof(IHandle<>));
});
}
NugetパッケージStructureMap.WebApi2は解像度とネストされたコンテナを配線するためのいくつかの他のファイルを作成したが、私はそれらを残していますこの質問の簡潔さのために。
これまで見てきましたが、もう一度見ていきます。私の最初の反応は、私がウェブ環境にいるので、私の使用の大半はリクエストごとに1ユーロになるということです。これまでのところ、同じリクエスト内で2番目のdbcontextをスコープする必要はありませんでした。これは私が最終的に採択する良い代替提案かもしれませんが、残念ながら、上記のコードが正しいかどうかについて私の質問に答えることはできません。 –