Asp.net web api Autofac RegisterAssemblyModule引发Autofac.Core.DependencyResolutionException异常
我有一个使用Autofac的WebAPI 2。下面的代码可以工作,但注册SemblyModule抛出依赖解析异常Asp.net web api Autofac RegisterAssemblyModule引发Autofac.Core.DependencyResolutionException异常,asp.net-web-api,asp.net-web-api2,autofac,autofac-module,autofac-configuration,Asp.net Web Api,Asp.net Web Api2,Autofac,Autofac Module,Autofac Configuration,我有一个使用Autofac的WebAPI 2。下面的代码可以工作,但注册SemblyModule抛出依赖解析异常 builder.RegisterModule<InfrastructureBootstrapper>(); //works builder.RegisterModule<LoggingBootstrapper>(); builder.RegisterModule<AppServicesBootstrapper>(); bu
builder.RegisterModule<InfrastructureBootstrapper>(); //works
builder.RegisterModule<LoggingBootstrapper>();
builder.RegisterModule<AppServicesBootstrapper>();
builder.RegisterModule()//作品
builder.RegisterModule();
builder.RegisterModule();
WebAPI 2
public static IContainer RegisterTypes()
{
var builder = new ContainerBuilder();
//throws DependencyResolutionException
builder.RegisterAssemblyModules(AppDomain.CurrentDomain.GetAssemblies());
//Below works
//builder.RegisterModule<InfrastructureBootstrapper>();
//builder.RegisterModule<LoggingBootstrapper>();
//builder.RegisterModule<AppServicesBootstrapper>();
...
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();
var container = builder.Build();
container.Resolve<HttpConfiguration>().DependencyResolver = new AutofacWebApiDependencyResolver(container);
return container;
}
publicstaticicontainer注册表类型()
{
var builder=new ContainerBuilder();
//抛出DependencyResolutionException
registerasemblymodules(AppDomain.CurrentDomain.GetAssemblies());
//下面的作品
//builder.RegisterModule();
//builder.RegisterModule();
//builder.RegisterModule();
...
RegisterAppController(Assembly.getExecutionGassembly()).InstancePerRequest();
var container=builder.Build();
container.Resolve().DependencyResolver=新的AutoFacWebApidencyResolver(容器);
返回容器;
}
基础架构引导程序
public class InfrastructureBootstrapper: Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
builder.RegisterType<Config>().As<IConfig>();
}
}
公共类基础结构引导程序:模块
{
受保护的覆盖无效负载(ContainerBuilder builder)
{
基础荷载(建筑商);
builder.RegisterType().As();
}
}
更新如下:日志引导程序
public class LoggingBootstrapper: Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
builder.Register(x => NLog.LogManager.GetCurrentClassLogger()).As<IFileLogger>().SingleInstance();
builder.RegisterType<Logger>().As<ILogger>();
}
}
公共类日志引导程序:模块
{
受保护的覆盖无效负载(ContainerBuilder builder)
{
基础荷载(建筑商);
Register(x=>NLog.LogManager.GetCurrentClassLogger()).As().SingleInstance();
builder.RegisterType().As();
}
}
所有项目都使用下面的代码
<package id="Autofac" version="4.6.2" targetFramework="net452" />
信息:
.net 4.5.2、WebAPI 2、Owin主机和通过Topshelf提供的Windows服务
客户api控制器使用承包商依赖项注入。注入未解决依赖关系,因此出现以下异常:
Unhandled Exception: Autofac.Core.DependencyResolutionException: An error occurr
ed during the activation of a particular registration. See the inner exception f
or details. Registration: Activator = Service (ReflectionActivator), Services =
[Game.MPC2.RXS.Api.HostServices.IService], Lifetime = Autofac.Core.
Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope -
--> None of the constructors found with 'Autofac.Core.Activators.Reflection.Defa
ultConstructorFinder' on type 'Game.MPC2.RXS.Api.HostServices.Servi
ce' can be invoked with the available services and parameters:
Cannot resolve parameter 'Game.MPC2.RXS.Logging.ILogger logger' of
constructor 'Void .ctor(Game.MPC2.RXS.Logging.ILogger, Game.MP
C2.RXS.Api.HostServices.IWebServer)'. (See inner exception for details.)
---> Autofac.Core.DependencyResolutionException: None of the constructors found
with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Roy
alMail.MPC2.RXS.Api.HostServices.Service' can be invoked with the availa
ble services and parameters:
Cannot resolve parameter 'Game.MPC2.RXS.Logging.ILogger logger' of
constructor 'Void .ctor(Game.MPC2.RXS.Logging.ILogger, Game.MP
C2.RXS.Api.HostServices.IWebServer)'.
at Autofac.Core.Activators.Reflection.ReflectionActivator.GetValidConstructor
Bindings(IComponentContext context, IEnumerable`1 parameters)
at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IC
omponentContext context, IEnumerable`1 parameters)
at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters)
--- End of inner exception stack trace ---
at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters)
at Autofac.Core.Resolving.InstanceLookup.<Execute>b__5_0()
at Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(Guid id, Func`1 cr
eator)
at Autofac.Core.Resolving.InstanceLookup.Execute()
at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifeti
meScope currentOperationScope, IComponentRegistration registration, IEnumerable`
1 parameters)
at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration reg
istration, IEnumerable`1 parameters)
at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistratio
n registration, IEnumerable`1 parameters)
at Autofac.Core.Container.ResolveComponent(IComponentRegistration registratio
n, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context,
Service service, IEnumerable`1 parameters, Object& instance)
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Ser
vice service, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context,
IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context)
at Game.MPC2.RXS.Host.Program.Main(String[] args) in C:\_Code\Ro
yalMail.MPC2.RedX.Service\src\Game.MPC2.RXS.Host\Program.cs:line 17
未处理的异常:Autofac.Core.dependencResolutionException:发生错误
在特定注册的激活过程中被删除。请参见内部异常f
或细节。注册:激活器=服务(反射激活器),服务=
[Game.MPC2.RXS.Api.HostServices.IService],life=Autofac.Core。
Lifetime.RootScopeLifetime,共享=共享,所有权=OwnedByLifetimeScope-
-->未找到具有“Autofac.Core.Activators.Reflection.Defa”的构造函数
ultConstructorFinder“on type”Game.MPC2.RXS.Api.HostServices.Servi
可以使用可用的服务和参数调用“ce”:
无法解析的参数“Game.MPC2.RXS.Logging.ILogger logger”
构造函数的Void.ctor(Game.MPC2.RXS.Logging.ILogger,Game.MP
C2.RXS.Api.HostServices.IWebServer。(有关详细信息,请参见内部异常。)
--->Autofac.Core.DependencyResolutionException:未找到任何构造函数
在类型“Roy”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”
可以使用availa调用alMail.MPC2.RXS.Api.HostServices.Service
可编程服务和参数:
无法解析的参数“Game.MPC2.RXS.Logging.ILogger logger”
构造函数的Void.ctor(Game.MPC2.RXS.Logging.ILogger,Game.MP
C2.RXS.Api.HostServices.IWebServer。
在Autofac.Core.Activators.Reflection.ReflectionActivator.GetValidConstructor上
绑定(IComponentContext上下文,IEnumerable`1参数)
在Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IC
组件上下文上下文,IEnumerable`1参数)
在Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1参数)处
---内部异常堆栈跟踪的结束---
在Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1参数)处
在Autofac.Core.Resolving.InstanceLookup.b_uu5_0()中
在Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(Guid id,Func`1)中
伊托尔)
在Autofac.Core.Resolving.InstanceLookup.Execute()处
在Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifeti)中
meScope currentOperationScope,iComponent注册,IEnumerable`
1)参数
在Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration注册表
ISTRITION,IEnumerable`1参数)
在Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration)上
n注册,IEnumerable`1参数)
在Autofac.Core.Container.ResolveComponent(IComponentRegistration)上
n、 IEnumerable`1参数)
在Autofac.ResolutionExtensions.TryResolveService(IComponentContext)中,
服务,IEnumerable`1参数,对象和实例)
在Autofac.ResolutionExtensions.ResolveService(IComponentContext上下文,Ser
副服务,IEnumerable`1参数)
在Autofac.ResolutionExtensions.Resolve[TService](IComponentContext)中,
IEnumerable`1参数)
在Autofac.ResolutionExtensions.Resolve[TService](IComponentContext上下文)
在C:\\ u Code\Ro中的Game.MPC2.RXS.Host.Program.Main(字符串[]args)处
yalMail.MPC2.RedX.Service\src\Game.MPC2.RXS.Host\Program.cs:第17行
能否包含完整的堆栈跟踪和异常的错误消息?请检查更新的帖子。检查此链接号。首先,它是通过Owin托管的,而不是IIS。其次,AppDomain.CurrentDomain.getAssemblys()返回所有程序集。看起来ILogger
未注册。LoggingBootstrapper
是公共类吗?你能分享一下它的代码吗?