【问题标题】:Ninject Contextual Binding Based on Method's Parameter ValueNinject 基于方法参数值的上下文绑定
【发布时间】:2011-11-30 17:50:45
【问题描述】:

我正在尝试使用 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);
        }
    }

有什么想法吗?谢谢

【问题讨论】:

  • 这对我有用。那么究竟是什么问题呢?
  • 确实,请解释发生了什么。是否抛出异常?
  • 投票结束,因为问题在当前形式下无法回答,并且 OP 没有任何形式的回应。

标签: c# ninject


【解决方案1】:

是的,这行得通。如果你用最新的 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多