I have started using Ninject a dependency injection framework for .NET. I find it very easy to use and recommend that people take a look.
Something in particular that I found useful is the ability to bind open generic types.
class Program
{
static void Main(string[] args)
{
var k = new StandardKernel(new MyModule());
var di = k.Get<Data<int>>();
di.Content = 14;
Console.WriteLine(di.Content);
var ds = k.Get<Data<string>>();
ds.Content = "hello";
Console.WriteLine(ds.Content);
}
}
class MyModule : StandardModule
{
public override void Load()
{
Bind(typeof(IData<>)).To(typeof(Data<>));
}
}
class Data<T> : IData<T>
{
public T Content { get; set; }
}
interface IData<T>
{
T Content { get; set; }
}
Very cool!