我有一个使用 Autofac 的 WebAPI 2。下面的作品,但RegisterAssemblyModules
抛出DependencyResolutionException
builder.RegisterModule<InfrastructureBootstrapper>(); //works
builder.RegisterModule<LoggingBootstrapper>();
builder.RegisterModule<AppServicesBootstrapper>();
网络API 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;
}
基础设施引导程序
public class InfrastructureBootstrapper: Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
builder.RegisterType<Config>().As<IConfig>();
}
}
更新如下:
LoggingBootstrapper
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>();
}
}
所有项目都在下面使用。
<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