2010-11-12 64 views
1

我們有一個使用Unity和IUnitOfWork的站點用於我們的EF上下文。到目前爲止,我們只使用一個EF上下文,因此這是在Unity配置中映射的。這一切都是通過構造函數注入來處理的,這是我們希望保持一致性的。單個ASP.NET MVC項目中的多個IUnitOfWork實現

我們現在爲我們的PaymentController引入了另一個EF上下文,該站點在站點內使用,但Unity配置當前僅允許我們爲IUnitOfWork創建一種類型。

我知道我可以爲具有不同名稱屬性的新上下文創建一個新的<register/>元素,但是如何在控制器構造函數中實現此操作以使用名爲付款的元素?

<register type="IUnitOfWork" mapTo="FirstContext" /> 
    <register type="IUnitOfWork" mapTo="PaymentsContext" name="payments"/> 

    public class PaymentController() 
    { 
    public PaymentController(IUnitOfWork unitOfWork) 
    { 
     //How to I tell unity that this needs to be a payments 
     _unitOfWork = unitOfWork; 
    } 
    } 

非常感謝

回答

0

FirstContextPaymentsContext每個具有唯一的一組實體(例如,每一個連接到不同的數據庫),這是值得野在代碼中明確定義此。這樣做的一種方式是通過指定工廠的每個工作單元:

public interface IFirstContextFactory 
{ 
    IUnitOfWork CreateNew(); 
} 

public interface IPaymentContextFactory 
{ 
    IUnitOfWork CreateNew(); 
} 

public class PaymentController() 
{ 
    public PaymentController(PaymentContextFactory paymentContextFactory) 
    { 
     //How to I tell unity that this needs to be a payments 
     this.paymentContextFactory = paymentContextFactory; 
    } 

    public void DoSomething() 
    { 
     using (var context = this.paymentContextFactory.CreateNew()) 
     { 
     // Do something useful 

      context.Commit(); 
     } 
    } 
} 

不僅使這個你的依賴很清楚(因爲你知道什麼情況下代碼處理的類型),但它也簡化DI配置,因爲您不需要任何指定的註冊。