我想知道是否有一种基于约定的方法来在Autofac中注册以下内容:
builder.RegisterType<BatchDocumentRepository>()
.As<IRepository<BatchDocument, IEnumerable<BatchDocument>, int>>();
builder.RegisterType<BatchRepository>()
.As<IRepository<Batch, IEnumerable<Batch>, int>>();
builder.RegisterType<DeploymentReleaseRepository>()
.As<IRepository<DeploymentRelease, IEnumerable<DeploymentRelease>, int>>();
builder.RegisterType<DeploymentRepository>()
.As<IRepository<Deployment, IEnumerable<Deployment>, int>>();
以上工作正常,但我只是想知道是否有更清洁,更少重复的方式。我看过这篇文章:Resolving Generic Interface with Autofac,但情况并不完全相同。
谢谢!
答案 0 :(得分:1)
您可以将.As<...>()
替换为.AsImplementedInterfaces()
。除此之外,你可以使用:
builder.RegisterAssemblyTypes()
.Where(t => t.GetInterfaces()
.Any(i => i.IsGenericType &&
i.GetGenericDefinition() == typeof(IRepository<>)))
.AsImplementedInterfaces();
或类似的东西。