DryIoc和UseInstance导致“期望实例存储在单例范围内”异常

配体

当我尝试获取对象实例(取决于UseInstance注册的参数)时,得到

DryIoc.ContainerException:期望实例存储在单例范围内,但无法在此处找到任何内容。可能是您从作用域容器中调用了UseInstance,但从另一个容器中进行了解析或注入了一个单例。

使用xUnit:

    public interface IFooDao { }
    public class FooDao : IFooDao
    {
        public FooDao(ConnectionStringSettings connString) { }
    }
    [Fact]
    void CompositionRootWontThrowException()
    {
        var container = new Container();
        container.Register<IFooDao, FooDao>(Reuse.Singleton);

        ConnectionStringSettings connString = ConfigurationManager.ConnectionStrings["ConnectionString"];
        container.UseInstance(connString);
        IFooDao dao = container.Resolve<IFooDao>();
    }

因此,我收到此异常消息,但找不到相应的问题和解决方案:

1)我没有作用域容器,因为我没有通过创建它container.OpenScope(),对吗?我只有一个容器,所以我无法解决一个错误的容器。这是一个容器

没有上下文(默认)

根据项目Wiki

2)那么,我“注入一个单例”是什么意思?我想在创建依赖项时将其注入到singleton中-这怎么了?反正我在做吗?

3)再次根据docs,conn字符串的实例应在单例范围内

当您调用UseInstance时,实例将*根据容器是否为范围(从OpenScope调用返回)而直接置于Open作用域或Singleton作用域中。此外,范围实例和实例实例可以彼此共存。

我之前使用过类似的代码,只是将DryIoc.MEF扩展与ExportManyAttribute和一起使用ImportAttribute的用法UseInstace与波纹管完全相同。一切正常。我在这里想念什么?为什么会引发此异常?

首先,我使这段代码非常简单,它不会失败:)

配体

问题出在null注册。

UseInstance可以使用null值,但是当您需要实际依赖时,即使已解决了实际null,也可能不会认为它足够,并且会引发异常。

ConnectionStringSettings connString = ConfigurationManager.ConnectionStrings["ConnectionString"];

返回空值,因为配置中的实际连接名称输入错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章