PerResolveLifetimeManager

CSharp · Console

/Program.cs

using System;
using Microsoft.Practices.Unity;


public class Program
{
 public static void Main()
 {
  IUnityContainer container = new UnityContainer();
  container.RegisterType<IEntityManager, EntityManager>();
  container.RegisterType<ICustomer, Customer>(); //transient, a new customer always
  container.RegisterType<IAddress, Address>();	 //transient, a new address always
  container.RegisterType<IDBContext, DBContext>(new PerResolveLifetimeManager());	 	 
  
  IEntityManager em0 = container.Resolve<IEntityManager>();
  IEntityManager em1 = container.Resolve<IEntityManager>();

  Console.WriteLine("DBContextinstance" + em0.address.context.instNumbr.ToString());  //should output DBContextinstance1
  Console.WriteLine("DBContextinstance" + em0.customer.context.instNumbr);//should output DBContextinstance1
  Console.WriteLine("DBContextinstance" + em1.address.context.instNumbr); //should output DBContextinstance2
  Console.WriteLine("DBContextinstance" + em1.customer.context.instNumbr); //should output DBContextinstance2

 }
}

public interface IEntityManager{
	
	 ICustomer customer
    {
        get;
  
    }
	 IAddress address
    {
        get;
 
    }
}

public class EntityManager : IEntityManager
{
	private ICustomer cust;
	private IAddress addr;
	
	public EntityManager(ICustomer customer, IAddress address)
	{
		cust = customer;
		addr = address;
	}
	
	public	 ICustomer customer
    {
			 get {return cust;}
		
    }
	 public IAddress address
    {
		 get {return addr;}
	
    }
}

public interface ICustomer{
	
	 IDBContext context
    {
        get;
    }
}

public class Customer : ICustomer
{
	private IDBContext cntx;
	
	public Customer(IDBContext context)
	{
		cntx = context;
	}
	
	 public IDBContext context
    {
		 get {return cntx;}
    }
}

public interface IAddress{
		 IDBContext context
    {
        get;
    }
}

public class Address : IAddress
{
	private IDBContext cntx;
	
	public Address(IDBContext context)
	{
		cntx = context;
	}
	
	public IDBContext context
    {
		 get {return cntx;}
    }
}

public interface IDBContext{
		 int instNumbr
    {
        get;
    }
}

public class DBContext : IDBContext
{
	
	 private static int contextInstanceNumber = 0;
	private int number;
	
	public DBContext()
	{
		contextInstanceNumber = contextInstanceNumber+1;
		number = contextInstanceNumber;
		
	}
	public int instNumbr
    {
		get {return number;}
    }
}
;