Skip to content

Instantly share code, notes, and snippets.

@ukaszjankowski
Created January 13, 2016 15:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ukaszjankowski/d1e926f6fcb44605b44b to your computer and use it in GitHub Desktop.
Save ukaszjankowski/d1e926f6fcb44605b44b to your computer and use it in GitHub Desktop.
// 1. Klasa, która wczeniej dostawala 20 zależnoci, teraz dostanie tylko jedna - skonfigurowana analogicznie
// do ITasks w tescie w drugiej czesci gista. Każdy ITask, sam bedzie decydowal na podstawie opcji, czy chce
// sie dodac do kolejki czy tez nie. Mysle zeby to zrealizowac na zasadzie:
public class QueueBuilder : IQueueBuilder
{
[Inject]
public ITasks Tasks { private get; set; }
public List<ITask> BuildQueue(Options Options)
{
var Result = new List<ITask>();
foreach(var ITask in Tasks) // Podejmowanie decyzji o tym czy klasa chce wziac udzial w kolejce
// przetwarzania wsadowego przerzucam na nia. Zwroci mi IEnumerable<ITask> wrzucajac
// this do niej, lub pusty zbior
{
Result.AddRange(ITask.GetInstanceIfNeeded(Options))
}
retutn Result;
}
}
public class NinjectBehaviorTests
{
[Fact]
public void NinjectReturnsDependenciesInCorrectOrder()
{
//arrange
var Kernel = new StandardKernel();
Kernel.Bind<ITasks>().To<TaskA>();
Kernel.Bind<ITasks>().To<TaskB>();
Kernel.Bind<ITasks>().To<TaskC>();
var ExpectedResult = new List<int>() { 1, 2, 3 };
//act
var Task = Kernel.GetAll<ITasks>();
var ResultSet = new List<int>();
Task.ToList().ForEach(t => ResultSet.Add(t.OrderNo));
//assert
Assert.True(ExpectedResult.SequenceEqual(ResultSet));
}
}
interface ITasks
{
int OrderNo { get; }
}
class TaskC : ITasks { public int OrderNo { get { return 3; } } }
class TaskB : ITasks { public int OrderNo { get { return 2; } } }
class TaskA : ITasks { public int OrderNo { get { return 1; } } }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment