2013-01-08 79 views
0

我有以下的UnitOfWork類:統一的IoC泛型類

public class UnitOfWork<TContext> : IUnitOfWork where TContext : IContext, new() 
{ 
    private readonly IContext _context; 

    public UnitOfWork() 
    { 
     _context = new TContext(); 
    } 

    public UnitOfWork(IContext context) 
    { 
     _context = context; 
    } 
    ... 
} 

,我希望把它註冊到使用Unity IoC容器,但我不知道該怎麼做。我試圖做這樣的事情:

var container = new UnityContainer(); 

container.RegisterType(typeof(UnitOfWork<>), new InjectionConstructor(new GenericParameter ("TContext"))); 
... 

但它沒有工作。任何想法如何做到這一點?

Tnx。

+0

爲什麼這個類有2個公共構造函數? – Steven

+0

它爲什麼重要? –

+0

由於具有多個構造函數是一種設計氣味,因爲它會導致模糊。爲什麼工作單元需要創建一個'TContext',它將從外部提供? – Steven

回答

0

您沒有發佈Resolve方法(或另一個依賴於UnitOfWork的對象),但在解析時您必須指定類型。 container.Resolve(typeof(UnitOfWork<>))無法正常工作。

如果您嘗試並解決UnitOfWork<ContextImplmentation>ContextImplemenation實例在容器中註冊,您將得到一個UnitOfWork<ContextImplmentation>並注入該上下文實現值。

如果您沒有註冊(或以某種方式重寫)該類型的任何內容,則會出現錯誤,因爲Unity不知道要使用哪種IContext實現。

+0

Tnx。缺口。事情是,史蒂文是正確的:如果我不想使用IoC我必須擺脫沒有參數的構造函數。 –