不支持服务类型IAssembliesResolver。参数名称:serviceType

时间:2015-01-13 16:46:15

标签: c# dependency-injection asp.net-web-api2 simple-injector

我在尝试连接Simple Injector和web api

时遇到了一些问题

我得到的错误是:

  

不支持服务类型IAssembliesResolver。参数名称:   的serviceType

当我尝试使用simpleinjector和web api(nuget)集成库附带的扩展方法注册控制器时,它会引发异常

simple injector webapi integraton package

container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

我刚刚修改了代码以覆盖IAssemblyResolver,但它没有工作

public static void Initialize()
    {
        GlobalConfiguration.Configuration.Services
        .Replace(typeof(IAssembliesResolver),
            new CustomAssembliesResolver());

        var container = new Container();

        InitializeContainer(container);

        container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

        container.Verify();

        GlobalConfiguration.Configuration.DependencyResolver =
            new SimpleInjectorWebApiDependencyResolver(container);
    }

我从this question获取了自定义程序集解析程序,我只是将其指向bin文件夹

public class CustomAssembliesResolver:DefaultAssembliesResolver
    {
        public override ICollection<Assembly> GetAssemblies()
        {
            var appPath = AppDomain.CurrentDomain.BaseDirectory;

            var  plugins = (
             from file in Directory.GetFiles(
                 appPath + "\\bin", "*.dll",
                 SearchOption.AllDirectories)
             let assembly = Assembly.LoadFile(file)
             select assembly)
             .ToArray();    

            return base.GetAssemblies()
                .Union(plugins).ToArray();
        }
    }

任何想法?

更新:

这是堆栈:

[ArgumentException: The service type IAssembliesResolver is not supported.
Parameter name: serviceType]
   System.Web.Http.Services.DefaultServices.GetService(Type serviceType) +529
   System.Web.Http.ServicesExtensions.GetService(ServicesContainer services) +62
   System.Web.Http.ServicesExtensions.GetServiceOrThrow(ServicesContainer services) +60
   SimpleInjector.SimpleInjectorWebApiExtensions.RegisterWebApiControllers(Container container, HttpConfiguration configuration) +107
   ProjectName.Api.App_Start.SimpleInjectorWebApiInitializer.Initialize() in c:\Users\User\Documents\Visual Studio 2013\Projects\ProjectName.Api\Project.Api\App_Start\SimpleInjectorWebApiInitializer.cs:25

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0
   System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) +229
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +211
   System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) +35
   WebActivator.BaseActivationMethodAttribute.InvokeMethod() +341
   WebActivator.ActivationManager.RunActivationMethods() +534
   WebActivator.ActivationManager.RunPostStartMethods() +38
   WebActivator.StartMethodCallingModule.Init(HttpApplication context) +159
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +530
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): Exception has been thrown by the target of an invocation.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12617364
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12456981

1 个答案:

答案 0 :(得分:4)

经过几个小时的挣扎,我得到了这个例外:

  

未找到入口点

原来,这个绑定重定向丢失了

<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>

感谢@steven帮我指出解决这个问题的方向

我删除了CustomAssembliesResolver,现在一切正常!