许多接口实现的Autofac注册

问题描述 投票:1回答:1

我有几个接口的实现,我需要在Autofac中注册,但是我很难找到一种方法来完成所有这些,而不是单独进行,因为我现在拥有它们:

builder.RegisterType<UserDefinedRepository<CType>>().As<IUserDefinedRepository<CType>>();
builder.RegisterType<UserDefinedRepository<LType>>().As<IUserDefinedRepository<LType>>();

CTypeLType都具有相同的基类型,接口和类实现的Type参数具有相同类型的限制。

我已经阅读了大量使用Autofac实现的示例,但大多数看起来都太复杂了,我正在尝试做的事情并且文档不是很有帮助(无论如何我对它的理解!)。

我已经拥有了所有其他存储库的注册,这些存储库一直运行良好多年,但它们都具有接口的具体实现:

var baseRepoType = typeof(InfraAbsRepos.IRepository);
builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
    .Where(t => baseRepoType.IsAssignableFrom(t))
    .AsImplementedInterfaces()
    .InstancePerRequest();
c# generics autofac
1个回答
1
投票

试试AsClosedTypesOf作为noted in the documentation

builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
       .AsClosedTypesOf(typeof(IUserDefinedRepository<>))
       .InstancePerRequest();

根据您要查看的内容,您可能需要添加Where子句来过滤程序集类型列表;和/或如果您需要注册更多接口或类型,您可能需要添加AsImplementedInterfaces

如果RegisterAssemblyTypes没有足够的灵活性,你可以使用反射自己迭代加载的类型集,也许可以将它与一些open generic registration support in Autofac结合起来。

© www.soinside.com 2019 - 2024. All rights reserved.