2

我有一个使用 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
4

0 回答 0