Unity IoC泛型类

时间:2013-01-08 09:32:57

标签: inversion-of-control unity-container

我有以下UnitOfWork类:

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。

1 个答案:

答案 0 :(得分:0)

您没有发布Resolve方法(或依赖于UnitOfWork的其他对象),但在解决时,您必须指定类型。 container.Resolve(typeof(UnitOfWork<>))无效。

如果您尝试解析UnitOfWork<ContextImplmentation>并在容器中注册了ContextImplemenation实例,那么您将获得注入了该上下文实现值的UnitOfWork<ContextImplmentation>

如果您没有注册(或以某种方式覆盖)该类型的任何内容,您将收到错误,因为Unity将不知道要使用哪个IContext的具体实现。