我正在尝试在Unity IoC中执行以下Autofac代码。
builder.RegisterAssemblyTypes(typeof (DataRepository<>).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
这基本上取代了单独注册以下内容:
DataSourceDataRepository : DataRepository<DataSource>, IDataSourceDataRepository
为清楚起见:这会将我的所有Repository类型注册为其实现的接口,因此当我注入IDataSourceDataRepository时,我会得到一个DataSourceDataRepository等。
在团结中我一直无法超越一次手动做一次。 测试代码只显示注册失败。
我的尝试:
container.RegisterType<RepositoryConnection>(new HierarchicalLifetimeManager());
container.RegisterTypes(
AllClasses.FromLoadedAssemblies().Where(t => typeof(IRepository).IsAssignableFrom(t)), getLifetimeManager: t => new TransientLifetimeManager(),
getInjectionMembers: t=> new InjectionConstructor[] {new InjectionConstructor(typeof(RepositoryConnection)) } );
答案 0 :(得分:1)
这应该有效:
container.RegisterTypes(
AllClasses.FromAssemblies(typeof(DataRepository<>).Assembly)
.Where(t => t.Name.EndsWith("Repository")),
WithMappings.FromAllInterfaces);