问题描述
我试图在我的Web api项目中使用简单的Injector, 之后,我得到了这个错误
这是我的SimpleInjectorInitializer.cs文件:
[assembly: WebActivator.PostApplicationStartMethod(typeof(Argo.WebApi.App_Start.SimpleInjectorWebApiInitializer),"Initialize")]
namespace Argo.WebApi.App_Start
{
using System.Web.Http;
using Argo.Core.Cache.Elasticsearch;
using Argo.DataRepository.Cache.Interface;
using Argo.Web.Api;
using SimpleInjector;
using SimpleInjector.Integration.WebApi;
using SimpleInjector.Lifestyles;
public static class SimpleInjectorWebApiInitializer
{
/// <summary>Initialize the container and register it as Web API Dependency Resolver.</summary>
public static void Initialize()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
InitializeContainer(container);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
}
private static void InitializeContainer(Container container)
{
//#error Register your services here (remove this line).
// For instance:
container.Register<IElasticOccurrenceCache,ElasticOccurrenceCache>(Lifestyle.Scoped);
container.Register<IBigNumbeRSService,BigNumbeRSService>(Lifestyle.Scoped);
}
}
}
// that is the only code i add in this file
container.Register<IElasticOccurrenceCache,BigNumbeRSService>(Lifestyle.Scoped);
我希望这是您需要的所有信息,是否需要更多信息,您可以在评论中询问我,我会提供
感谢帮助
解决方法
您可以从堆栈跟踪中得出结果:
SimpleInjector的WebRequestLifestyle
类(位于SimpleInjector.Integration.Web.dll中)正在更新,其ctor委托给其基类ScopedLifestyle
(位于SimpleInjector.dll中)的ctor中。 ),它希望显示签名。
但是,当运行时从单独的程序集中加载ScopedLifestyle
类型时,它找不到所需的内容-没有可用的ctor签名正确,它们都与SimpleInjector.Integration不匹配。 .Web.dll表示应该存在。
仅有的两种解释是:
- SimpleInjector团队在组装中犯了一个可怕的错误
- 或者您的SimpleInjector.dll和SimpleInjector.Integration.Web.dll版本不匹配
解决此问题的最佳方法是删除所有obj,bin和package文件夹(不要依赖VS的“ clean”功能),确保所有包引用均指向应的包>一起工作,然后运行nuget restore。
实际上,我建议完全删除SimpleInjector和SimpleInjector.Integration.Web,然后仅重新安装第二个-这将自动安装基本版本的匹配版本。
(有关这些类的详细信息,请参见此处:https://simpleinjector.org/ReferenceLibrary/html/T_SimpleInjector_Integration_Web_WebRequestLifestyle.htm-对解决问题没有帮助,但对我的回答有所帮助)