无法将Autofac通用接口分配给服务

时间:2019-06-20 22:46:00

标签: c# dependency-injection inversion-of-control autofac

我在一个应用中喜欢20个这样的注册:

builder.RegisterType(typeof(FilterParser<>)).As(typeof(IFilterParser<>)).InstancePerDependency();

当我尝试构建容器时,出现如下错误:

  

类型'My.Namespace.FilterParser`1 [TEntity]'无法分配给服务'My.Namespace.IFilterParser`1'。'

请注意,区别在于实现中的[TEntity]和界面中缺少public class FilterParser<TEntity> : IFilterParser<TEntity> where TEntity : new () public interface IFilterParser<TEntity> where TEntity : new ()

我的服务确实实现了接口:

AsImplementedInterfaces

我还使用.net内核实现了此注册,它可以正常工作,但是在Autofac中,它只是拒绝工作。

我什至尝试了builder.RegisterType(typeof(FilterParser<>)).AsImplementedInterfaces() .InstancePerDependency(); ,但遇到相同的错误

try to add a sudo before pip install otherwise you can create virtual env in witch you can install your requirement without having issues

1 个答案:

答案 0 :(得分:3)

使用RegisterGeneric()构建器方法:

builder.RegisterGeneric(typeof(FilterParser<>))
    .As(typeof(IFilterParser<>))
    .InstancePerDependency();
  

从容器请求匹配的服务类型时,Autofac会将其映射到实现类型的等效关闭版本

引用Registration Concepts: Open Generic Components