2012-01-20 10 views
3

私は、以下の構成があります。AutoFac寿命は:特定の状況で新しいインスタンスを強制

builder.Register<EntityContext>().As(
    c=> { 
     var entityCtx = new EntityContext(); 
     //snip snip: some config stuff 

     return entityCtx; 
    }).As<MyDbContext>().InstancePerLifetimeScope(); 

EntityContextは明らかに再びDbContextから継承MyDbContextから継承します。私は通常

... 
public MyRepository(MyDbContext context) {...} 

としてそれらを使用しています、私のリポジトリのコンストラクタで

これは私が欲しいものであるHTTPリクエストあたり1 CTXを持つことが保証されます。しかし、今私は特定のリポジトリに対して、通常使用されているよりも異なるインスタンスのEntityContextを必要とする必要があります。

これはどのように実現しますか?私はRegister<EntityContext>()....As<DbContext>()...

他のアイデアを使用し

  • 別の設定:以下は私の心に来ましたの?

答えて

3

正しく理解していれば、私はちょうど働くことができる適切な解決策、すなわちOwnedInstancesのAutoFacを使用しました。たとえば:あなたはMyRepositoryは、別のトランザクションで実行したい場合

class MyRepository 
{ 
    public MyRepository(Owned<MyDbContext> context, MyDbContext context2) 
    { 
     //context and context2 are two different object instances 
    } 
} 

このシナリオは、特に便利である、すなわち、それは、他のリポジトリとは異なるDbContextのインスタンスを持っている必要があります。

2

生涯の要件が異なる場合は、別の設定を使用するか、手動でコンテナを呼び出して新しいコンテキストのインスタンスを作成するか(またはコンテキストインスタンスを直接作成する必要がありますが、これはIoCコンテナ)。

+0

Thx、あなたは何とか正しい方向に私を指摘答えます。私はちょうどAutoFacでこれを実装する方法の解決策を見つけました – Juri

関連する問題