我有一个界面:
interface IDataHoldingSession<out T>
我想做以下事情:
container.RegisterAll<IDataHoldingSession<object>>(
typeof(IDataHoldingSession<DbContext>),
typeof(IDataHoldingSession<PrincipalContext>));
然而,这失败了以下例外:
System.ArgumentException:提供的类型
IDataHoldingSession<DbContext>
未实现IDataHoldingSession<Object>
。
解决此问题的最合适方法是什么?
答案 0 :(得分:1)
您遇到的行为可能被视为当前Simple Injector 2.3版本中的错误。我们正在努力发布2.4,我将确保为即将发布的2.4版本修复此问题。框架中有更多地方未检查varient类型。
与此同时,您可以使用以下解决方法:
container.RegisterAll(typeof(IDataHoldingSession<object>),
Lifestyle.Transient.CreateRegistration<IDataHoldingSession<object>>(
() => container.GetInstance<IDataHoldingSession<string>>(), container),
Lifestyle.Transient.CreateRegistration<IDataHoldingSession<object>>(
() => container.GetInstance<IDataHoldingSession<IPlugin>>(), container));
<强>更新强>
Simple Injector v2.4已经发布。此版本修复了此错误。