将不同的通用类型注册为已扫描

时间:2014-10-05 12:31:54

标签: c# generics autofac

我尝试使用Repository<T> IRepository<T> T的接口注册通用类型IEntity

builder.RegisterAssemblyTypes(assemblies)
       .Where(t => typeof(IEntity).IsAssignableFrom(t))
       .WithMetadata("Type", (t) => t)
       .AsImplementedInterfaces()
       .InstancePerLifetimeScope();

现在的问题是如何注册每个IEntity找到我的班级

Repository<T>: IRepository<T> where T: IEntity

1 个答案:

答案 0 :(得分:1)

实际上,您不需要注册实体,只需注册存储库即可。 Autofac对开放式和封闭式仿制药都有出色的支持。从OpenGenerics文档中,注册存储库的开放泛型类型:

builder.RegisterGeneric(typeof(Repository<>))
    .As(typeof(IRepository<>));

您现在可以像下面这样解析已关闭的存储库类型:

var userRepo = container.Resolve<IRepository<User>>();