2012-01-20 58 views
3

我有以下配置:AutoFac壽命:在特定情況下強制新實例

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

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

EntityContextMyDbContext再次從DbContext顯然繼承繼承。

在我的倉庫的構造我通常用它們作爲

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

這可以確保讓每個HTTP請求一個CTX這就是我想要的。但是現在我需要對於特定的存儲庫,我希望EntityContext的不同的實例比通常使用的要多。

你會怎麼做到這一點?下面就來我的腦海裏:

  • 另一個config其中我用Register<EntityContext>()....As<DbContext>()...

任何其他的想法?

回答

3

我剛剛發現可以工作,即使用AutoFac的OwnedInstances如果我理解正確妥善的解決辦法。例如:

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

這種情況是非常有用的,如果你想MyRepository在不同的事務中運行,即它需要具有比其他存儲庫不同DbContext實例。

2

一旦你有不同的壽命要求,您必須使用其他配置或手動調用容器給你上下文的新實例(或直接創建上下文實例,但是這是你不想使用IoC容器時要做些什麼)。

+0

Thx,你回答某種方式指出我在正確的方向。我剛剛找到了解決如何使用AutoFac實現這一點的解決方案 – Juri