Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Autofac程序集扫描注册期间未找到程序集错误_C#_Autofac_Autofac Configuration - Fatal编程技术网

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

C# Autofac程序集扫描注册期间未找到程序集错误,c#,autofac,autofac-configuration,C#,Autofac,Autofac Configuration,我计划在我的项目中自动连接接口和存储库,包括BL和DAL。但是我遇到了一个我不知道如何解决的问题 这是密码 namespace MovieManager.UI { public static class ContainerConfig { public static IContainer Configure() { var builder = new ContainerBuilder(); buil

我计划在我的项目中自动连接接口和存储库,包括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;
        }
    }
}
namespace MovieManager.UI
{
公共静态类容器配置
{
公共静态IContainer配置()
{
var builder=new ContainerBuilder();
builder.RegisterController(Assembly.GetAssembly(typeof(HomeController))).InstancePerRequest();
builder.RegisterController(Assembly.GetAssembly(typeof(MovieController))).InstancePerRequest();
builder.RegisterAssemblyTypes(Assembly.Load(nameof(BL)))
.Where(t=>t.Namespace!=null&&t.Namespace.Contains(“存储库”))
.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(“存储库”))
.As(t=>t.GetInterfaces().FirstOrDefault(i=>i.Name==“i”+t.Name));
//builder.RegisterType().As();
//builder.RegisterType().As();
//builder.RegisterType().As();
//builder.RegisterType().As();
//builder.RegisterType().As();
var containerBuilder=builder.Build();
SetResolver(新的AutofacDependencyResolver(containerBuilder));
返回集装箱船;
}
}
}
这是我的项目文件夹结构

得到这个错误


我做错了什么。如果您有任何帮助,我们将不胜感激。

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

代码
nameof(BL)
将显式输出字符串“BL”。我猜想您的程序集实际上根据项目名称被称为
MovieManager.BL
,因此失败了

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


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

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

代码
nameof(BL)
将显式输出字符串“BL”。我猜想您的程序集实际上根据项目名称被称为
MovieManager.BL
,因此失败了

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


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

问题在于注册的第二部分: .As(t=>t.GetInterfaces().FirstOrDefault(i=>i.Name==“i”+t.Name))

第一个或默认值上的筛选器可能返回null

请检查服务名称和接口是否与FirstOrDefault中的条件匹配


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

问题在于注册的第二部分: .As(t=>t.GetInterfaces().FirstOrDefault(i=>i.Name==“i”+t.Name))

第一个或默认值上的筛选器可能返回null

请检查服务名称和接口是否与FirstOrDefault中的条件匹配


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

当您将程序集名称用作字符串而不是nameof(BL)时会发生什么?获得相同的错误当您将程序集名称用作字符串而不是nameof(BL)时会发生什么?获得相同的错误感谢您的响应。但是如果我将
Assembly.Load(nameof(BL))
更改为
Assembly.Load(“MovieManager.BL”)
。我在
builder.Build()
as
System.ArgumentNullException:'值不能为null附近遇到新错误。参数名称:serviceType'
,这是执行字符串连接导致问题的筛选器。然而,你最初提出的问题似乎已经解决了;已找到该程序集。花一些时间研究LINQ语句并解决该空引用问题,如果您仍然无法解决该问题,请使用更新的堆栈跟踪和repu info打开一个新问题。“System.ArgumentNullException:”值不能为空。参数名称:serviceType“我收到上述错误,因为某些存储库没有自己的接口(使用您的代码,它可以找到存储库及其接口。如果缺少任何内容,您将获得值不能为null错误),感谢您的响应。但是如果我将
Assembly.Load(nameof(BL))
更改为
Assembly.Load(“MovieManager.BL”)
。我在
builder.Build()
as
System.ArgumentNullException:'值不能为null附近遇到新错误。参数名称:serviceType'
,这是执行字符串连接导致问题的筛选器。然而,你最初提出的问题似乎已经解决了;已找到该程序集。花一些时间研究LINQ语句并解决该空引用问题,如果您仍然无法解决该问题,请使用更新的堆栈跟踪和repu info打开一个新问题。“System.ArgumentNullException:”值不能为空。参数名称:serviceType“我出现上述错误,因为某些存储库没有自己的接口(使用您的代码,它可以找到存储库及其接口。如果缺少任何内容,您将获得值不能为null错误)