C# DryIoC从Autofac迁移:无法使用ResolveParameter进行解析
我正试图用一个指定的伪ITestInterface实例来解析TestClassC。通过指定ResolveParameter,可以使用Autofac执行此操作。这对DryIoC有可能吗?我已经通读了文档和其他一些关于类似问题的线程,但没有找到一种方法来解决这些问题。我的要求是通过这次考试C# DryIoC从Autofac迁移:无法使用ResolveParameter进行解析,c#,dryioc,C#,Dryioc,我正试图用一个指定的伪ITestInterface实例来解析TestClassC。通过指定ResolveParameter,可以使用Autofac执行此操作。这对DryIoC有可能吗?我已经通读了文档和其他一些关于类似问题的线程,但没有找到一种方法来解决这些问题。我的要求是通过这次考试 private class TestClassB : ITestInterface { } private class TestClassC { public TestC
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分钟。即使我彻底简化了我要做的事情,它也无法解决一些非常简单的密钥注册问题。我确信问题出在我的键盘后面,但这是一场斗争,异常消息没有帮助。