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);

我怎样才能做到这一点 ?

谢谢,

4

3 回答 3

1

考虑使用一个无参数的构造函数,以及一些接受参数的初始化函数。除了不能通过您的工厂传递参数之外,请考虑您想要反序列化对象的情况。它们应该被构造,然后参数应该被一个一个地填充。

于 2012-11-15T21:08:23.087 回答
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>();
    }
}
于 2012-11-15T21:25:22.273 回答
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;
    }
}
于 2012-11-16T14:40:37.977 回答