我计划在我的项目(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)
将显式输出字符串“ BL”。我想根据您的项目名称,您的程序集实际上被称为MovieManager.BL
,因此失败了。
请注意,
nameof(MovieManager.BL)
还将输出“ BL”,因为nameof输出您提供的名称的最后一个组成部分。
您可以手动传递全名,或者,如果引用了程序集,则可以采用与控制器相同的方法,并从类型中获取程序集。
问题出在注册的第二部分:.As(t => t.GetInterfaces()。FirstOrDefault(i => i.Name ==“ I” + t.Name))
您的第一个过滤器或默认过滤器可能返回null。
请检查服务名称和接口是否符合FirstOrDefault中的条件