我正在Web API项目中调用WCF服务,并且正在努力使其正确注册。我曾经在某一时刻工作过,但我怀疑nuget更新已改变了一切。即使将注册类型设置为Lifestyle.Scoped,我现在仍然在验证时遇到一次性瞬态组件错误。
此外,我还检查了所有版本,它们都在同一版本上。 Transient component is registered as transient but implements idisposable
<package id="SimpleInjector" version="4.6.0" targetFramework="net472" />
<package id="SimpleInjector.Integration.WebApi" version="4.6.0" targetFramework="net472" />
<package id="SimpleInjector.Integration.WebApi.WebHost.QuickStart" version="4.6.0" targetFramework="net472" />
这是我的代码:
public static void Initialize()
{
var container = new Container();
// Lifestyle set as per recommended for API:
// https://simpleinjector.readthedocs.io/en/latest/lifetimes.html#asyncscoped-vs-webrequest
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
container.Options.UseFullyQualifiedTypeNames = true;
InitializeContainer(container);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
}
private static void InitializeContainer(Container container)
{
// WCF
container.Register<IServices>(() => new ServiceClient("endpoint"), Lifestyle.Scoped);
}
例外:
引发的异常:SimpleInjector.dll中的'SimpleInjector.DiagnosticVerificationException' SimpleInjector.dll中发生类型为'SimpleInjector.DiagnosticVerificationException'的异常,但未在用户代码中处理 配置无效。报告了以下诊断警告: -[Disposable Transient Component]容器已注册为瞬态,但实现了IDisposable。 有关警告的详细信息,请参见Error属性。请参阅https://simpleinjector.org/diagnostics,如何解决问题以及如何抑制个别警告。
似乎忽略了Lifestyle.Scoped。有什么想法吗?
第二个例外:
引发的异常:SimpleInjector.dll中的'SimpleInjector.DiagnosticVerificationException' SimpleInjector.dll中发生类型为'SimpleInjector.DiagnosticVerificationException'的异常,但未在用户代码中处理 配置无效。报告了以下诊断警告: -[Disposable Transient Component]容器已注册为瞬态,但实现了IDisposable。 有关警告的详细信息,请参见Error属性。请参阅https://simpleinjector.org/diagnostics,如何解决问题以及如何抑制个别警告。