使用Autofac时注册的通用类型很糟糕

时间:2017-06-07 15:05:01

标签: c# generics dependency-injection autofac

我有服务

Fragments

如您所见,我尝试注入我的解析器的泛型类型。

public class CircleProfileService : CircleService<ICircleProfileInput, ICircleProfileOutput, ICircleProfile>, ICircleProfileService
{
        public CircleProfileService(ICircleProfileQueryBuilder queryBuilder,
                                             ICircleQueryProcessor queryProcessor,
                                             ICircleParser<ICircleProfile> parser)
            : base(queryBuilder, queryProcessor, parser)
        {
        }
        ... other methods
}

以下是我如何注册我的通用类型(Autofac文档中的所有内容)

public interface ICircleParser<out TOutput> where TOutput : ICircleParsedOutput
{
        IEnumerable<TOutput> Parse(string json);
}

public class CircleParser<TOutput> : ICircleParser<TOutput> where TOutput: ICircleParsedOutput, new() 
//new() is only one option to make project buildable as jsonParser want non-abstract type...
    {
        private readonly IJsonParser jsonParser;

        public CircleParser(IJsonParser jsonParser)
        {
            this.jsonParser = jsonParser;
        }

        public IEnumerable<TOutput> Parse(string json)
        {
            return jsonParser.Parse<TOutput>(json);
        }
    }

但是这总是抛出无法注入解析器的异常......

我做错了什么?

错误:

  

Autofac.Core.DependencyResolutionException:没有使用&#39; Autofac.Core.Activators.Reflection.DefaultConstructorFinder&#39;找到的构造函数。 on type&#39; MyProj.Services.DataServices.Circle.CircleProfileService&#39;可以使用可用的服务和参数调用:   无法解析参数&#39; MyProj.Services.DataServices.Circle.Parsers.Interfaces.ICircleParser builder.RegisterGeneric(typeof(CircleParser<>)).As(typeof(ICircleParser<>)); 1 [MyProj.Services.DataServices.Circle.Outputs.Interfaces.ICircleProfile])&#39;。

1 个答案:

答案 0 :(得分:0)

无法对代表发表评论,所以我不得不发帖。

你对IJsonParser有约束力吗?如果没有,则需要添加一个,以便autofac可以将其实现注入CircleParser