示例#1
0
 public void CanBindSelfWithArgs()
 {
     Assert.Equal("test", _kernel.Get <string>(BindArg.Typed("test")));
     Assert.Equal("test2", _kernel.Get <string>(BindArg.Typed("test2"), BindArg.Typed(4), BindArg.Typed('c')));
     Assert.Equal(11, _kernel.Get <int>(BindArg.Typed("test2"), BindArg.Typed(11), BindArg.Typed(42UL), BindArg.Typed('c')));
     Assert.Equal(null, _kernel.Get <string>(BindArg.Typed <string>(null), BindArg.Typed(4), BindArg.Typed('c')));
 }
示例#2
0
        public void InjectUsesArgBindings()
        {
            var test = new InjectTestClass();

            Assert.Null(test.Longs);
            _kernel.Inject(test);
            Assert.Equal(null, test.String);
            Assert.Equal(0, test.Long);
            Assert.NotNull(test.Longs);
            Assert.Equal(0, test.Longs.Count);

            _kernel.Bind <long>().ToConstant(5);
            _kernel.Inject(test);
            Assert.Equal(null, test.String);
            Assert.Equal(5, test.Long);
            Assert.NotNull(test.Longs);
            Assert.True(test.Longs.SequenceEqual(new long[] { 5 }));

            var argKernel = _kernel.Get <IGetKernel>(BindArg.Typed("test"));

            argKernel.Inject(test);
            Assert.Equal("test", test.String);
            Assert.Equal(5, test.Long);
            Assert.NotNull(test.Longs);
            Assert.True(test.Longs.SequenceEqual(new long[] { 5 }));
        }
示例#3
0
 public void ArgBindUseBetterCtor()
 {
     _kernel.Bind <char>().ToConstant('d');
     _kernel.Bind <long>().ToConstant(12);
     Assert.Equal(new SomeClass('d', 12), _kernel.Get <SomeClass>());
     Assert.Equal(new SomeClass('c', 12, "test"), _kernel.Get <SomeClass>(BindArg.Typed('c'), BindArg.Typed("test")));
     Assert.Equal(new SomeClass('c', 12, "test"), _kernel.Get <SomeClass2>(BindArg.Typed('c'), BindArg.Typed("test")).Test);
 }
示例#4
0
 public void CanBindDerivedUnbindableWithArgs()
 {
     Assert.Throws <InvalidOperationException>(() => _kernel.Get <SomeClass2>());
     Assert.Equal(new SomeClass('c', 12), _kernel.Get <SomeClass2>(BindArg.Typed('c'), BindArg.Named("i", 12L)).Test);
     _kernel.Bind <char>().ToConstant('d');
     Assert.Throws <InvalidOperationException>(() => _kernel.Get <SomeClass2>());
     Assert.Equal(new SomeClass('d', 42), _kernel.Get <SomeClass2>(BindArg.Named("i", 42L)).Test);
 }
示例#5
0
 public void ArgsCoolerThanBind()
 {
     _kernel.Bind <char>().ToConstant('d');
     _kernel.Bind <long>().ToConstant(12);
     Assert.Equal(new SomeClass('d', 12), _kernel.Get <SomeClass>());
     Assert.Equal(new SomeClass('d', 42), _kernel.Get <SomeClass>(BindArg.Typed(42L)));
     Assert.Equal(new SomeClass('c', 42), _kernel.Get <SomeClass>(BindArg.Typed('c'), BindArg.Typed(42L)));
 }
示例#6
0
 public void ArgBindDoNotUseBetterCtorIfTypeWasBindMethod()
 {
     _kernel.Bind <char>().ToConstant('a');
     _kernel.Bind <long>().ToConstant(12);
     _kernel.Bind <SomeClass>().ToMethod(c => new SomeClass('x', 42, c.CanBind(typeof(string)) ? c.Get <string>() : null));
     Assert.Equal(new SomeClass('x', 42), _kernel.Get <SomeClass>());
     Assert.Equal(new SomeClass('x', 42, "test"), _kernel.Get <SomeClass>(BindArg.Typed('b'), BindArg.Typed("test")));
     Assert.Equal(new SomeClass('x', 42, "test2"), _kernel.Get <SomeClass2>(BindArg.Typed('c'), BindArg.Typed("test2")).Test);
 }
示例#7
0
        public void DerivedFactoriesCaptureArgBind()
        {
            _kernel.Bind <SomeClass>().ToSelf();
            var f = _kernel.Get <Func <SomeClass> >();

            Assert.Throws <InvalidOperationException>(() => f());
            var f2 = _kernel.Get <Func <SomeClass> >(BindArg.Typed('c'), BindArg.Typed(11L));

            Assert.Equal(new SomeClass('c', 11), f2());
        }
示例#8
0
        public void ArgBindFactoriesCaptureArgBind()
        {
            _kernel.Bind <Func <long, SomeClass> >().ToMethod(c => l => c.Get <SomeClass>(BindArg.Typed(l)));
            var kernel = _kernel.Get <IGetKernel>(BindArg.Typed('c'));
            var f      = kernel.Get <Func <long, SomeClass> >();

            _kernel.Bind <char>().ToConstant('d');
            Assert.Equal(new SomeClass('c', 12), f(12));
            Assert.Equal(new SomeClass('c', 42), f(42));
        }
示例#9
0
        public void ArgBindDoNotUseBetterCtorIfTypeWasBindSingleton()
        {
            _kernel.Bind <char>().ToConstant('a');
            _kernel.Bind <long>().ToConstant(12);
            _kernel.Bind <SomeClass>().ToSelf().InSingletonScope();
            var obj = _kernel.Get <SomeClass>();

            Assert.Equal(new SomeClass('a', 12), obj);
            Assert.Same(obj, _kernel.Get <SomeClass>(BindArg.Typed('b'), BindArg.Typed("test")));
            Assert.Same(obj, _kernel.Get <SomeClass2>(BindArg.Typed('c'), BindArg.Typed("test2")).Test);
        }
示例#10
0
 public void LameArgsAreIgnored()
 {
     _kernel.Bind <char>().ToConstant('d');
     _kernel.Bind <long>().ToConstant(12);
     Assert.Equal(new SomeClass('d', 12), _kernel.Get <SomeClass>());
     Assert.Equal(new SomeClass('d', 42), _kernel.Get <SomeClass>(BindArg.Typed(42L), BindArg.Typed(2)));
     Assert.Equal(new SomeClass('c', 42), _kernel.Get <SomeClass>(BindArg.Typed('c'), BindArg.Typed(false), BindArg.Named("i", "test"), BindArg.Typed(42L), BindArg.Typed(new object())));
     Assert.Equal(new SomeClass('c', 42), _kernel.Get <SomeClass>(
                      BindArg.Named("c", "a"), BindArg.Named("c", 12L), BindArg.Named("c", 12), BindArg.Named("c", 'c'),
                      BindArg.Typed(42L), BindArg.Named("i", 11), BindArg.Named("i", "i")));
 }
示例#11
0
        public void ArgBindReturnsItsKernel()
        {
            var kernel  = _kernel.Get <IGetKernel>(BindArg.Typed(12L), BindArg.Typed('c'));
            var kernel2 = _kernel.Get <IGetKernel>(BindArg.Typed(12L), BindArg.Typed('d'));

            Assert.NotEqual(kernel, _kernel);
            Assert.NotEqual(kernel2, _kernel);
            Assert.Throws <InvalidOperationException>(() => _kernel.Get <SomeClass>());
            Assert.Equal(new SomeClass('c', 12), kernel.Get <SomeClass>());
            Assert.Equal(new SomeClass('d', 12), kernel2.Get <SomeClass>());
        }
示例#12
0
        public void ArgBindDoNotUseBetterCtorIfTypeWasBindConst()
        {
            var test = new SomeClass('x', -1, "ttt");

            _kernel.Bind <char>().ToConstant('a');
            _kernel.Bind <long>().ToConstant(12);
            _kernel.Bind <SomeClass>().ToConstant(test);
            Assert.Same(test, _kernel.Get <SomeClass>());
            Assert.Same(test, _kernel.Get <SomeClass>(BindArg.Typed('b'), BindArg.Typed("test")));
            Assert.Same(test, _kernel.Get <SomeClass2>(BindArg.Typed('c'), BindArg.Typed("test2")).Test);
        }
示例#13
0
        public void SingletonReturnedFromMainKernel()
        {
            _kernel.Bind <char>().ToConstant('c');
            _kernel.Bind <long>().ToConstant(12);
            _kernel.Bind <SomeClass>().ToSelf().InSingletonScope();

            var o1 = _kernel.Get <SomeClass>();
            var o2 = _kernel.Get <SomeClass>(BindArg.Typed("test"));

            Assert.True(ReferenceEquals(o1, o2));
        }
示例#14
0
        public void ArgBindCanBeStackedAndOverriden()
        {
            var kernel = _kernel.Get <IGetKernel>(BindArg.Typed(12L));

            Assert.Throws <InvalidOperationException>(() => kernel.Get <SomeClass>());
            Assert.Equal(new SomeClass('c', 12), kernel.Get <SomeClass>(BindArg.Typed('c')));
            Assert.Equal(new SomeClass('c', 42), kernel.Get <SomeClass>(BindArg.Typed('c'), BindArg.Typed(42L)));

            var kernel2 = kernel.Get <IGetKernel>(BindArg.Typed('d'));

            Assert.Equal(new SomeClass('d', 12), kernel2.Get <SomeClass>());
        }
示例#15
0
        public void ArgBindCanMakeFactories()
        {
            _kernel.Bind <Func <long, SomeClass> >().ToMethod(c => l => c.Get <SomeClass>(BindArg.Typed(l)));
            var f = _kernel.Get <Func <long, SomeClass> >();

            Assert.Throws <InvalidOperationException>(() => f(11));
            _kernel.Bind <char>().ToConstant('d');
            Assert.Equal(new SomeClass('d', 12), f(12));
            Assert.Equal(new SomeClass('d', 42), f(42));
            _kernel.Bind <char>().ToConstant('c');
            Assert.Equal(new SomeClass('c', 12), f(12));
            Assert.Equal(new SomeClass('c', 42), f(42));
        }