Autofac中具有通用类型参数的自动布线存储库

时间:2014-04-07 23:53:30

标签: c# generics autofac

我想知道是否有一种基于约定的方法来在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,但情况并不完全相同。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将.As<...>()替换为.AsImplementedInterfaces()。除此之外,你可以使用:

builder.RegisterAssemblyTypes()
    .Where(t => t.GetInterfaces()
                 .Any(i => i.IsGenericType &&
                           i.GetGenericDefinition() == typeof(IRepository<>)))
    .AsImplementedInterfaces();

或类似的东西。