RegisterAll不是变种

时间:2013-10-28 22:35:31

标签: .net dependency-injection covariance simple-injector

我有一个界面:

interface IDataHoldingSession<out T>

我想做以下事情:

container.RegisterAll<IDataHoldingSession<object>>(
    typeof(IDataHoldingSession<DbContext>), 
    typeof(IDataHoldingSession<PrincipalContext>));

然而,这失败了以下例外:

  

System.ArgumentException:提供的类型IDataHoldingSession<DbContext>未实现IDataHoldingSession<Object>

解决此问题的最合适方法是什么?

1 个答案:

答案 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已经发布。此版本修复了此错误。