CSharp · Console
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;}
}
}