Понимание Ninject с более сложным сценарием
Я пытаюсь использовать ninject, чтобы... хорошо делать то, что делает ninject..
В основном инъекция не происходит.
В приведенном ниже коде я создаю ядро в своем "тесте" и ожидаю, что реализация IDrinkCan каким-то образом попадет в мой класс CokeComsumer.
Я думаю, что что-то здесь упустил.., поскольку IDrinkCan имеет значение null, когда я ставлю точку останова на конструкторе CokeConsumer.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ninject;
using Ninject.Modules;
using NUnit.Framework;
namespace testThing
{
public class MyDependencyKernel
{
public static IKernel DependencyKernel { get; internal set; }
public MyDependencyKernel()
{
DependencyKernel = new StandardKernel(new MyNinjectModule());
}
public MyDependencyKernel(NinjectModule ninjectModule)
{
DependencyKernel = new StandardKernel(ninjectModule);
}
}
public class MyNinjectModule : NinjectModule
{
public override void Load()
{
Bind<IDrinkCan>().To<Coke>();
}
}
public interface IDrinkCan
{
void OpenCan(int canSize);
void DrinkSome(int milliletres);
bool IsEmpty();
}
public class Coke : IDrinkCan
{
private int _capacity;
private bool _isEmpty;
public void OpenCan(int canSize)
{
_capacity = canSize;
}
public void DrinkSome(int milliletres)
{
if (!_isEmpty) _capacity -= milliletres;
if (_capacity < 0) _isEmpty = true;
}
public bool IsEmpty()
{
return _isEmpty;
}
}
public class CokeConsumer
{
//[Inject]
public IDrinkCan Drink { get; set; }
[Inject] //drink is not being injected
public CokeConsumer(IDrinkCan drink)
{
Drink = drink;
Drink.OpenCan(330);
}
public CokeConsumer()
{
Drink.OpenCan(330);
}
public void DrinkSomeCoke(int amount)
{
Drink.DrinkSome(amount);
}
}
[TestFixture]
public class SomeTestClass
{
[Test]
public void DoSomeTest()
{
MyDependencyKernel kernel = new MyDependencyKernel();
CokeConsumer steve = new CokeConsumer();
steve.DrinkSomeCoke(100);
}
}
}
1 ответ
Решение
Это не верно!!
[Test]
public void DoSomeTest()
{
MyDependencyKernel kernel = new MyDependencyKernel();
CokeConsumer steve = new CokeConsumer();
steve.DrinkSomeCoke(100);
}
Я должен получить CokeConsumer из ядра!!!!
т.е.
var steve = kernel.DependencyKernel.Get<CokeConsumer>();