You 不能部分开放课程(例如与UnitOfWork<Repository<>,>
你已经指定T
但不是O
) 里面一个typeof
,尝试一下:
var builder = new ContainerBuilder();
builder
.RegisterGeneric(typeof(UnitOfWork<,>))
.As(typeof(IUnitOfWork))
.InstancePerDependency();
The where T : Repository<O>
通用约束将注意第一个参数应该是Repository<>
但它不能与RegisterGeneric
因为它需要一个通用接口所以需要创建一个IUnitOfWork<T,O>
…
但你的模型很奇怪。为什么你的UnitOfWork
need a Repository<>
类型参数?
您可以得到一个,而不是将其作为类型参数Repository<>
在你的UnitOfWork<E>
构造函数:
public class UnitOfWork<E> : IUnitOfWork<E> where E : BaseEntity
{
private readonly Repository<E> repository;
public UnitOfWork(Repository<E> repository)
{
this.repository = repository;
}
//.. other methods
}
Where IUnitOfWork<E>
public interface IUnitOfWork<E> : IDisposable where E : BaseEntity
{
void SaveChanges();
}
以及 Autofac 注册:
var builder = new ContainerBuilder();
builder
.RegisterGeneric(typeof(Repository<>)).AsSelf();
builder
.RegisterGeneric(typeof(UnitOfWork<>))
.As(typeof(IUnitOfWork<>))
.InstancePerDependency();
var container = builder.Build();
// sample usage
var u = container.Resolve<IUnitOfWork<MyEntity>>();