A couple of days ago I spent some time trying to find how to make Unity call a factory method when user requests an object. Then I forgot about it, and tried to Google it again. This stuff is surprisingly hard to find, especially given the fact that the method used in Unity 1.x (StaticFactoryExtension
) was declared obsolete in favor of InjectionFactory
which for whatever reason Unity authors consider “much easier” to use.
Anyway, here’s a full working example, mostly for my future reference:
using System;
using Microsoft.Practices.Unity;
namespace UnityObjectFactory
{
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
var factory = container.Resolve<OrderFactory>();
container.RegisterType<IOrder>(
new InjectionFactory(unused_container=>factory.CreateOrder()));
var order1 = container.Resolve<IOrder>();
Console.WriteLine("Fisrt order has number " + order1.Number);
var order2 = container.Resolve<IOrder>();
Console.WriteLine("Second order has number " + order2.Number);
}
}
interface IOrder
{
int Number { get; }
}
class Order : IOrder
{
public Order(int number) { Number = number; }
public int Number { get; private set; }
}
class OrderFactory
{
int _lastOrder;
public IOrder CreateOrder()
{
return new Order(++_lastOrder);
}
}
}
CodeProject
This article was originally posted at
http://www.ikriv.com/blog?p=1146
Ivan is a hands-on software architect/technical lead working for Thomson Reuters in the New York City area. At present I am mostly building complex multi-threaded WPF application for the financial sector, but I am also interested in cloud computing, web development, mobile development, etc.
Please visit my web site:
www.ikriv.com.