如何解决找不到方法:'Void SimpleInjector.ScopedLifestyle..ctorSystem.String,Boolean'
我试图在我的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-对解决问题没有帮助,但对我的回答有所帮助)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。