2

我有一个界面:

interface IDataHoldingSession<out T>

我想做以下事情:

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

但是,这会失败,但有以下例外:

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

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

4

1 回答 1

1

您遇到的行为可以被视为当前 Simple Injector 2.3 版本中的错误。我们正在努力发布 2.4,我将确保在即将发布的 2.4 版本中修复此问题。框架中有更多地方不检查各种类型。

同时,您可以使用以下解决方法:

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

于 2013-10-29T07:54:43.437 回答