Displaying an instance of an object in Ninject bindings

I think this is a pretty simple script in Ninject, but it's hard for me to find the right terminology for finding it.

I want to do something like:

public interface IClass
{
    IInner Inner { get; }
}

public class ConcreteClass : IClass
{
    public ConcreteClass(IInner inner)
    {
        Inner = inner;
    }

    public IInner Inner {get; private set;}
}

public class Test
{
    private BindingObject _binding {get; set;}

    private override BindingTest()
    {
        //These two lines need some extra configuration
        Kernel.Bind<IClass>().To<ConcreteClass>();
        Kernel.Bind<IInner>().To<ConcreteInner>();

        _binding = new BindingObject(1);
        IClass class1 = Kernel.Get<IClass>();

        _binding = new BindingObject(2);
        IClass class2 = Kernel.Get<IClass>();

        _binding = new BindingObject(1);
        IClass class3 = Kernel.Get<IClass>();

       //The bindings should be set up such that these asserts both pass
       Assert.AreSame(class1.Inner, class3.Inner);
       Assert.AreNotSame(class1.Inner, class2.Inner);
    }
}

The implementation BindingObjectdoes not matter, as this is just an example of a toy. The idea is that the two BindingObjectswill compare the same values ​​if and only if the intone passed to their constructor is the same. Similarly, implementation IInnerand ConcreteInnerdo not matter.

, , , _binding, , Ninject IInner, , _binding, , . - ? , ( ) ?

+4
1

.InScope(). , .

( BindingObject) func < > . / .

IInner ; , , .

:

Kernel.Bind<IClass>().To<ConcreteClass>();
Kernel.Bind<IInner>().To<ConcreteInner>().InScope(o => { return _binding ; });

var reference1 = new object();
var reference2 = new object();

_binding = reference1;
var class1 = kernel.Get<IClass>();

_binding = reference2;
var class2 = kernel.Get<IClass>();

_binding = reference1;
var class3 = kernel.Get<IClass>();

class1 class3 IInner, class2 .

: http://www.ninject.org/wiki.html Ninject → Ninject → Object Scopes. . : http://bobcravens.com/2010/03/ninject-life-cycle-management-or-scoping/

//

+2

Source: https://habr.com/ru/post/1541653/


All Articles