65.9K
CodeProject is changing. Read more.
Home

Object Factory in Unity 2.x

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Dec 6, 2012

Apache
viewsIcon

9085

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);
        }
    }
}