C# DryIoC从Autofac迁移:无法使用ResolveParameter进行解析

C# DryIoC从Autofac迁移:无法使用ResolveParameter进行解析,c#,dryioc,C#,Dryioc,我正试图用一个指定的伪ITestInterface实例来解析TestClassC。通过指定ResolveParameter,可以使用Autofac执行此操作。这对DryIoC有可能吗?我已经通读了文档和其他一些关于类似问题的线程,但没有找到一种方法来解决这些问题。我的要求是通过这次考试 private class TestClassB : ITestInterface { } private class TestClassC { public TestC

我正试图用一个指定的伪ITestInterface实例来解析TestClassC。通过指定ResolveParameter,可以使用Autofac执行此操作。这对DryIoC有可能吗?我已经通读了文档和其他一些关于类似问题的线程,但没有找到一种方法来解决这些问题。我的要求是通过这次考试

    private class TestClassB : ITestInterface { }

    private class TestClassC
    {
        public TestClassC(ITestInterface instance)
        {
            Instance = instance;
        }

        public ITestInterface Instance { get; }
    }        

    [TestCase("key")]
    public void RegisterKeyedDependency_WhenCalled_EqualsExpected(string key)
    {
        var Container = new Container();
        var fake = A.Fake<ITestInterface>();

        Container.Register<TestClassC>();
        Container.UseInstance(fake, serviceKey: key);
        Container.Register<ITestInterface, TestClassB>(Reuse.Singleton);

        var result1 = Container.Resolve<TestClassC>();
        var result2 = Container.Resolve<TestClassC>(/* How to specify that I want to use the fake here */);

        Assert.That(result1.Instance, Is.Not.EqualTo(fake));
        Assert.That(result2.Instance, Is.EqualTo(fake));
    }
私有类TestClassB:ITestInterface{}
私有类TestClassC
{
公共TestClassC(ITestInterface实例)
{
实例=实例;
}
公共ITestInterface实例{get;}
}        
[测试用例(“键”)]
公共无效寄存器keyedDependency(当需要调用时)(字符串键)
{
var Container=新容器();
var fake=A.fake();
Container.Register();
Container.UseInstance(false,serviceKey:key);
容器.寄存器(重用.单例);
var result1=Container.Resolve();
var result2=Container.Resolve(/*如何指定我要在此处使用假代码*/);
Assert.That(result1.Instance,Is.Not.EqualTo(false));
Assert.That(result2.Instance,Is.EqualTo(false));
}
编辑:我找到了一个可能的解决方案,虽然不令人满意,但现在可以

    [Pure]
    public static T ResolveWithDependency<T, TDependency>(this Container container, string key)
    {
        return container.Resolve<Func<TDependency, T>>().Invoke(container.Resolve<TDependency>(key));
    }
[纯]
公共静态ResolveWithDependency(此容器,字符串键)
{
返回container.Resolve().Invoke(container.Resolve(key));
}

基本上,如果使用Func解析依赖项,DryIoC将保持其打开状态。但是,如果在解析时要选择多个依赖项,那么这将变得非常乏味。如果您希望它具有5个依赖项,那么您必须选择一个具有5个参数的Func,它没有Autofac ResoleParameter API那么好。

我花了大约20分钟来处理这个问题。即使我彻底简化了我要做的事情,它也无法解决一些非常简单的密钥注册问题。我确定问题出在我的键盘后面,但这是一场斗争,异常消息没有帮助。我把这件事搞砸了大约20分钟。即使我彻底简化了我要做的事情,它也无法解决一些非常简单的密钥注册问题。我确信问题出在我的键盘后面,但这是一场斗争,异常消息没有帮助。