C# 未找到具有-autofac的构造函数
我有以下自动传真配置:C# 未找到具有-autofac的构造函数,c#,asp.net-mvc,autofac,C#,Asp.net Mvc,Autofac,我有以下自动传真配置: public static void RegisterDI() { var builder = GetBuilder(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } public static ContainerBuilder GetBuilder() { var
public static void RegisterDI()
{
var builder = GetBuilder();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
public static ContainerBuilder GetBuilder()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetCallingAssembly());
builder.RegisterFilterProvider();
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(x => x.FullName.Contains("Soundyladder")).ToArray();
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerRequest();
builder.RegisterAssemblyModules(assemblies);
return builder;
}
以下是我在服务层的服务:
public UserService(IUserRepository userRepository)
{
this._userRepository = userRepository;
}
这是我的控制器:
public UserController(IUserService userService)
{
this._userService = userService;
}
每次启动应用程序时,都会出现以下错误:
找不到具有的构造函数
类型上的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”
“Soundyladder.Service.Services.UserService”可以通过调用
可用服务和参数:无法解析参数
'Soundyladder.DataAccess.Repositories.IUserRepository userRepository'
构造函数的无效性
.ctor(Soundyladder.DataAccess.Repositories.IUserRepository)“”。
描述:在执行过程中发生未处理的异常
当前的web请求。请查看堆栈跟踪以了解更多信息
有关错误的信息及其在代码中的来源
异常详细信息:Autofac.Core.DependencyResolutionException:无
构造函数发现了
类型上的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”
“Soundyladder.Service.Services.UserService”可以通过调用
可用服务和参数:无法解析参数
'Soundyladder.DataAccess.Repositories.IUserRepository userRepository'
构造函数的无效性
.ctor(Soundyladder.DataAccess.Repositories.IUserRepository)“”
我不知道为什么会这样。我在这个项目中的设置与我在其他项目中的设置相同。当我将我的其他项目与此进行比较时,我看不出任何区别。看起来您只注册了“服务”后缀类型,而忘记了“存储库”后缀类型
.Where(t => t.Name.EndsWith("Service"))
(代表问题作者发布解决方案)
我更改了自动传真配置。现在它开始工作了:
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterFilterProvider();
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(x => x.FullName.Contains("Soundyladder")).ToArray();
builder.RegisterAssemblyTypes(assemblies)
.AsImplementedInterfaces()
.InstancePerRequest();
return builder;
var builder=newcontainerbuilder();
RegisterController(Assembly.getExecutionGassembly());
builder.RegisterFilterProvider();
var assemblies=BuildManager.getReferencedAssemblys().Cast().Where(x=>x.FullName.Contains(“Soundyladder”).ToArray();
builder.RegisterAssemblyTypes(程序集)
.AsImplementedInterfaces()
.InstancePerRequest();
返回生成器;
它似乎希望您使用单个参数创建构造函数,即:public UserRepository(IUserRepository repo){…}
@RonBeyer:在我的Repository类中?对“有人能帮我吗”的回答是“是”,但实际上这可能不是您想要问的问题。作为一名编辑,我倾向于删掉它——最好的问题类型是具体的,例如“为什么会在中出现”。这比请求“帮助”要负责任得多,因为“帮助”有点宽泛和未定义。但我在存储库层没有什么要解决的问题?但是IUserService
依赖于IUserRepository
,因此如果您试图解决IUserService,DependencyResolver
将在使用所需的IUserService实例为您提供服务之前尝试解析所有依赖类。
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterFilterProvider();
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(x => x.FullName.Contains("Soundyladder")).ToArray();
builder.RegisterAssemblyTypes(assemblies)
.AsImplementedInterfaces()
.InstancePerRequest();
return builder;