我试图使用ninjects上下文绑定功能,根据传递给方法的枚举参数的值绑定到接口的正确实现,而且我被卡住了。我以为我可以使用元数据完成此任务。这是我尝试过的,而不是它的工作原理。
enum Colors
{
Red,
Blue
}
public interface IColor
{}
public class Red : IColor
{}
public class Blue : IColor
{}
class Test
{
private readonly StandardKernel _kernal;
public Test()
{
_kernal = new StandardKernel();
_kernal.Bind<IColor>().To<Red>().WithMetadata("color", Colors.Red);
_kernal.Bind<IColor>().To<Blue>().WithMetadata("color", Colors.Blue);
}
public void TestMethod(Colors color)
{
IColor iColor = _kernal.Get<IColor>(m => m.Get<Colors>("color") == color);
}
}
有什么想法?感谢
答案 0 :(得分:0)
是的,这有效。如果使用最新的ninject和NUnit创建新的类库,则可以运行以下命令来验证:
enum Colors
{
Red,
Blue
}
public interface IColor
{ }
public class Red : IColor
{ }
public class Blue : IColor
{ }
class Test
{
private readonly StandardKernel _kernal;
public Test()
{
_kernal = new StandardKernel();
_kernal.Bind<IColor>().To<Red>().WithMetadata("color", Colors.Red);
_kernal.Bind<IColor>().To<Blue>().WithMetadata("color", Colors.Blue);
}
public IColor TestMethod(Colors color)
{
return _kernal.Get<IColor>(m => m.Get<Colors>("color") == color);
}
}
[TestFixture]
public class TestMetadataFunctions
{
[Test]
public void test_method_should_return_specified_color()
{
var test = new Test();
var color = test.TestMethod(Colors.Red);
Assert.IsInstanceOf(typeof(Red), color);
}
}