C# Autofac正在解析重复实例

C# Autofac正在解析重复实例,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,我想使用Autofac获取特定命令的所有验证程序的列表。我已经创建了一个接口 public interface IValidate<T> { void Validate(T command); } public class ValidateRule1 : IValidate<CreateEnrollmentCommand> { public void Validate(CreateEnrollmen

我想使用Autofac获取特定命令的所有验证程序的列表。我已经创建了一个接口

    public interface IValidate<T>
    {
        void Validate(T command);
    }
    public class ValidateRule1 : IValidate<CreateEnrollmentCommand>
    {
        public void Validate(CreateEnrollmentCommand command)
        {
        }
    }

    public class ValidateRule2 : IValidate<CreateEnrollmentCommand>
    {
        public void Validate(CreateEnrollmentCommand command)
        {
        }
    }
我已经为这个接口实现了2个验证器

    public interface IValidate<T>
    {
        void Validate(T command);
    }
    public class ValidateRule1 : IValidate<CreateEnrollmentCommand>
    {
        public void Validate(CreateEnrollmentCommand command)
        {
        }
    }

    public class ValidateRule2 : IValidate<CreateEnrollmentCommand>
    {
        public void Validate(CreateEnrollmentCommand command)
        {
        }
    }
我将这些验证器注入这样的IEnumerable中

public class MyCommandHandler
{
    private readonly IRepository _repository;
    private readonly IEnumerable<IValidate<CreateEnrollmentCommand>> _validators;

    public MyCommandHandler(IEnrollmentRepository enrollmentRepository, IEnumerable<IValidate<CreateEnrollmentCommand>> validators)
    {
        _enrollmentRepository = enrollmentRepository;
        _validators = validators;
    }
 }
这是我的Autofac配置

    public class AutofacModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            // Register API Assembly
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                .AsImplementedInterfaces();

            // Register Data Access
            var api = typeof(CreateStudentCommand).Assembly;
            builder.RegisterAssemblyTypes(api)
                .AsImplementedInterfaces();

            // Register Data Access
            var dataAccess = typeof(StudentRepository).Assembly;
            builder.RegisterAssemblyTypes(dataAccess)
                .AsImplementedInterfaces();


            builder
                .RegisterType<Mediator>()
                .As<IMediator>()
                .InstancePerLifetimeScope();

            builder.Register<ServiceFactory>(context =>
            {
                var c = context.Resolve<IComponentContext>();
                return t => c.Resolve(t);
            });

            builder.RegisterAssemblyTypes(typeof(CreateStudentCommand).GetTypeInfo().Assembly).AsImplementedInterfaces(); // via assembly scan
        }
    }
我期望Autofac注入两个验证器,但实际上它注入了每个验证器的两个实例。我在IEnumerable属性中总共得到4个验证程序实例。知道我做错了什么吗

编辑:
正如@Lasse V.Karlsen所指出的,IValidate接口和验证器都位于同一个程序集中。您有几个调用可以注册程序集中的所有类型,特别是我要检查:

包含CreateStudentCommand类型的程序集中所有类型的重复注册 用于标识程序集中所有类型的所有类型是否在单独的程序集中
验证器和CreateStudentCommand类型是否在同一程序集中?事实上,为了清楚起见,您能注意到哪些类型在哪些程序集中吗?另外,看起来您将使用CreateStudentCommand类型注册程序集的程序集类型两次,一次在//Register Data Access注释下,一次在底部。@LasseV.Karlsen是的,验证接口和验证器都位于应用程序程序集中。我将删除额外的注册,看看这是否导致了问题。@LasseV.Karlsen mate这正是问题所在,我已经定义了两次注册!你救了我一天。你能把你的评论作为回答吗?我会接受的?