2012-11-15 61 views
2

我有這個實現工廠模式工廠模式,返回一個泛型類和有一個參數

public interface IFactory<T> 
{ 
    T GetObject(); 
} 

public class Factory<T> : IFactory<T> where T : new() 
{ 
    public T GetObject() 
    { 
     return new T(); 
    } 
} 

,但我喜歡比GetObject回報泛型類Repository<Customer>Repository implement IRepository)的實例會和工廠有參數(ISession的類型)

結果應該是:

IRepository<ICustomer> myRepo = new Factory<ICustomer>(session); 

我怎樣才能做到這一點?

感謝,

+0

這是一個非常複雜的問題,你想知道如何使用指定的構造函數參數構造泛型類?或者您是否正在尋找更深入的見解,瞭解如何將「IRepository 」的請求映射並解析爲「Factory 」? – CodingGorilla

+0

@lazyberezovsky更新了問題。現在的客戶端界面 –

+0

這聽起來像大多數國際奧委會/ DI圖書館會很擅長的... –

回答

1

考慮有一個參數的構造函數,而是和一些初始化函數,它的參數。除了不能通過工廠傳遞參數之外,請考慮您想要反序列化對象的情況。應該構建它們,然後應該逐個填充參數。

0

它是否必須如此通用?爲什麼不喜歡這個?

public interface IFactory<T> 
{ 
    IRepository<T> Create(ISession session); 
} 

public class RepositoryFactory<T> : IFactory<T> where T : new() 
{ 
    public IRepository<T> Create(ISession session) 
    { 
     return new IRepository<T>(); 
    } 
} 
0

我不知道,如果你真的需要的通用這一水平,但你不能使用一般的流暢工廠方針,並有初始化函數從構造來代替。

var CustomerGeneric = GenericFluentFactory<Customer, WebSession> 
         .Init(new Customer(), new WebSession()) 
         .Create(); 


public static class GenericFluentFactory<T, U> 
{ 
    public static IGenericFactory<T, U> Init(T entity, U session) 
    { 
     return new GenericFactory<T, U>(entity, session); 
    }   
} 

public class GenericFactory<T, U> : IGenericFactory<T, U> 
{ 
    T entity; 
    U session; 

    public GenericFactory(T entity, U session) 
    { 
     this.entity = entity; 
     this.session = session; 
    } 

    public T Create() 
    { 
     return this.entity; 
    } 
} 
相關問題