繁体   English   中英

Autofac 程序集扫描注册期间未找到程序集错误

[英]Assembly not found error during Autofac assembly scanning registration

我计划在我的项目中自动连接接口和存储库,包括 BL 和 DAL。 但我遇到了一个我不知道如何解决的问题。

这是代码

namespace MovieManager.UI
{
    public static class ContainerConfig
    {
        public static IContainer Configure()
        {
            var builder = new ContainerBuilder();

            builder.RegisterControllers(Assembly.GetAssembly(typeof(HomeController))).InstancePerRequest();
            builder.RegisterControllers(Assembly.GetAssembly(typeof(MovieController))).InstancePerRequest();

            builder.RegisterAssemblyTypes(Assembly.Load(nameof(BL)))
                .Where(t => t.Namespace != null && t.Namespace.Contains("Repositories"))
                .As(t => t.GetInterfaces().FirstOrDefault(i => i.Name == "I" + t.Name));

            builder.RegisterAssemblyTypes(Assembly.Load(nameof(DAL)))
                .Where(t => t.Namespace != null && t.Namespace.Contains("Repositories"))
                .As(t => t.GetInterfaces().FirstOrDefault(i => i.Name == "I" + t.Name));

            //builder.RegisterType<MovieSupervisor>().As<IMovieSupervisor>();
            //builder.RegisterType<GenreTransactionSupervisor>().As<IGenreTransactionSupervisor>();


            //builder.RegisterType<MovieRepository>().As<IMovieRepository>();
            //builder.RegisterType<GenreRepository>().As<IGenreRepository>();
            //builder.RegisterType<GenreTransactionRepository>().As<IGenreTransactionRepository>();

            var containerBuilder = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(containerBuilder));
            return containerBuilder;
        }
    }
}

这是我的项目文件夹结构

在此处输入图像描述

并得到这个错误

在此处输入图像描述

我做错了什么。 任何帮助,将不胜感激。

这不是 Autofac 问题,很可能只是因为名称错误而无法加载程序集。

代码nameof(BL)将明确 output 字符串“BL”。 我想您的程序集实际上根据项目名称称为MovieManager.BL ,因此失败。

请注意, nameof(MovieManager.BL)也将 output "BL",因为 nameof 输出您提供的名称的最后一个组件。

您可以手动传递全名,或者,如果您引用了程序集,您可以采用与控制器相同的方法,并从类型中获取程序集。

问题出在注册的第二部分: .As(t => t.GetInterfaces().FirstOrDefault(i => i.Name == "I" + t.Name))

您的第一个或默认过滤器可能会返回 null。

请检查服务名称和接口是否符合您在 FirstOrDefault 中的条件

此外,正如我之前在评论中提到的,Assembly.Load 需要有一个正确的程序集名称,但您已经修复了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM