Object Factory in Unity 2.x





0/5 (0 vote)
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.
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); } } }