1.Install NInject :
2.Prj Structure :
3.Define a Interface :
interface ICalculate<T>
{
T Operate(T a, T b);
}
4.Sample implementation :
class CalculatorAdd<T> : ICalculate<T>
{
public T Operate(T a, T b)
{
return (dynamic)a + (dynamic)b;
}
}
class CalculatorDiv<T> : ICalculate<T>
{
public T Operate(T a, T b)
{
return (dynamic)a / (dynamic)b;
}
}
class CalculatorMul<T> : ICalculate<T>
{
public T Operate(T a, T b)
{
return (dynamic)a * (dynamic)b;
}
}
class CalculatorSub<T> : ICalculate<T>
{
public T Operate(T a, T b)
{
return (dynamic)a - (dynamic)b;
}
}
5.Add NInject Modules
class DIModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<ICalculate<int>>().To<CalculatorAdd<int>>();
Bind<ICalculate<double>>().To<CalculatorSub<double>>();
}
}
class DIModule2:Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<ICalculate<int>>().To<CalculatorMul<int>>();
Bind<ICalculate<double>>().To<CalculatorDiv<double>>();
}
}
6.Usage :
class Program
{
private StandardKernel _diManager ;
static void Main(string[] args)
{
var _diManager = new StandardKernel(new DIModule());
var r1 = _diManager.Get<ICalculate<int>>().Operate(1, 4);
Console.WriteLine(r1);//r1 = 1+4
var r2 = _diManager.Get<ICalculate<double>>().Operate(4, 1);
Console.WriteLine(r2);//r2=4-1
//switch module
_diManager = new StandardKernel(new DIModule2());
var r3 = _diManager.Get<ICalculate<int>>().Operate(2, 4);
Console.WriteLine(r3);//r3 = 2*4
var r4 = _diManager.Get<ICalculate<double>>().Operate(4, 2);
Console.WriteLine(r4);//r4 = 4/2
Console.ReadKey();
}
}
7. result :