Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save wahidshalaly/462398 to your computer and use it in GitHub Desktop.
Save wahidshalaly/462398 to your computer and use it in GitHub Desktop.
Example of NInject usage for a class with a parameterized constructor
using System;
using Ninject;
using Ninject.Parameters;
using NUnit.Framework;
namespace NinjectExample
{
[TestFixture]
public class NinjectTests
{
private IKernel kernel;
[SetUp]
public void Setup()
{
kernel = new StandardKernel(new MyNinjectModule());
}
[Test]
public void CanGetInstanceOfClassA()
{
var value = DateTime.Now;
var instanceA = kernel.Get<IClassA>(new ConstructorArgument("value", value));
Assert.That(instanceA, Is.TypeOf(typeof(ClassA)));
Assert.That(instanceA.Value, Is.EqualTo(value));
}
[Test]
public void CanGetInstanceOfClassAWithString()
{
var value = DateTime.Now.ToShortDateString();
var instanceA = kernel.Get<IClassA>(new ConstructorArgument("stringValue", value));
Assert.That(instanceA, Is.TypeOf(typeof(ClassA)));
Assert.That(instanceA.Value.ToShortDateString(), Is.EqualTo(value));
}
[Test]
public void CanGetInstanceOfClassB()
{
var value = DateTime.Now;
var instanceA = kernel.Get<IClassA>(new ConstructorArgument("value", value));
var instanceB = kernel.Get<IClassB>(new ConstructorArgument("a", instanceA));
Assert.That(instanceB, Is.TypeOf(typeof(ClassB)));
Assert.That(instanceB.InstanceA, Is.EqualTo(instanceA));
}
}
}
using System;
using Ninject.Modules;
namespace NinjectExample
{
public class MyNinjectModule : NinjectModule
{
public override void Load()
{
Bind<IClassA>().To<ClassA>().Named("ClassA");
Bind<IClassB>().To<ClassB>().Named("ClassB");
}
}
public interface IClassA
{
DateTime Value { get; }
void ChangeValue(DateTime value);
}
public interface IClassB
{
IClassA InstanceA { get; }
void ChangeA(IClassA a);
}
public class ClassA : IClassA
{
private DateTime _value;
public ClassA(DateTime value)
{
if (DateTime.MinValue.Equals(value))
throw new ArgumentOutOfRangeException("value");
_value = value;
}
public ClassA(String stringValue)
{
if (!DateTime.TryParse(stringValue, out _value))
throw new ArgumentOutOfRangeException("stringValue");
}
public DateTime Value
{
get { return _value; }
}
public void ChangeValue(DateTime value)
{
if (DateTime.MinValue.Equals(value))
throw new ArgumentOutOfRangeException("value");
_value = value;
}
}
public class ClassB : IClassB
{
private IClassA _instanceA;
public IClassA InstanceA
{
get { return _instanceA; }
}
public ClassB(IClassA a)
{
_instanceA = a;
}
public void ChangeA(IClassA a)
{
_instanceA = a;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment