¿Dónde debo crear la instancia de la Unidad de trabajo en una aplicación ASP.Net MVC 3?

He leído tantas publicaciones en Stackoverflow como puedo encontrar con respecto al uso de un patrón de Unidad de trabajo dentro de una aplicación ASP.Net MVC 3 que incluye una capa empresarial. Sin embargo, todavía tengo un par de preguntas con respecto a este tema y agradecería cualquier comentario que la gente me pueda dar.

Estoy desarrollando una aplicación web ASP.Net MVC 3 que utiliza EF 4.1. Usaré tanto el Repositorio como los Patrones de la Unidad de Trabajo con este proyecto de forma similar a como se usan enest gran tutorial

La diferencia en mi proyecto es que también necesito incluir una capa empresarial (proyecto separado en mi solución) para llevar a cabo las diversas reglas comerciales de la aplicación. El tutorial mencionado anteriormente no tiene una capa Business y, por lo tanto, crea una instancia de la clase Unidad de trabajo desde el controlador

public class CourseController : Controller
{
    private UnitOfWork unitOfWork = new UnitOfWork();

Sin embargo, mi pregunta es, ¿dónde debería crear la instancia de la clase Unidad de trabajo si tengo una capa empresarial?

Personalmente, creo que debería crearse en mi controlador y luego inyectarse en la capa empresarial de la siguiente manera:

public class PeopleController : Controller
{
    private readonly IUnitOfWork _UoW;
    private IPersonService _personService;

    public PeopleController()
    {
        _UoW = new UnitOfWork();
        _personService = new PersonService(_UoW);
    }

    public PeopleController(IUnitOfWork UoW, IPersonService personService)
    {
        _UoW = UoW;
        _personService = personService;

    }

    public ActionResult Edit(int id)
    {
        Person person = _personService.Edit(id);
        return View(person);
    }

public class UnitOfWork : IUnitOfWork, IDisposable
{
    private BlogEntities _context = new BlogEntities();
    private PersonRepository personRepository = null;

    public IPersonRepository PersonRepository
    {
        get
        {

            if (this.personRepository == null)
            {
                this.personRepository = new PersonRepository(_context);
            }
            return personRepository;
        }
    }

    public void Save()
    {
        _context.SaveChanges();
    }


public class PersonService : IPersonService
{
    private readonly IUnitOfWork _UoW;

    public PersonService(IUnitOfWork UoW)
    {
        _UoW = UoW;
    }

    public Person Edit(int id)
    {
         Person person = _UoW.PersonRepository.GetPersonByID(id);
         return person;
    }

public class PersonRepository : IPersonRepository
{
    private readonly BlogEntities _context;

    public PersonRepository(BlogEntities context)
    {
        _context = context;
    }

    public Person GetPersonByID(int ID)
    {
        return _context.People.Where(p => p.ID == ID).Single();
    }

He leído a otros que dicen que la creación de instancias de la Unidad de Trabajo no debe estar en el Controlador, sino que debe crearse en la Capa de Servicio. La razón por la que no estoy tan seguro acerca de este enfoque es porque mi Controlador puede tener que usar varias Capas de Servicio diferentes en una transacción comercial, y si la instancia de Unidad de Trabajo se creó dentro de cada Servicio, resultaría en varias instancias de Unidad de Trabajo que se crea, lo que anula el propósito, es decir, una Unidad de trabajo por transacción comercial.

al vez lo que he explicado anteriormente está mal, pero si es así, agradecería mucho que alguien me pudiera corregi

De nuevo, gracias por tu ayuda

Respuestas a la pregunta(2)

Su respuesta a la pregunta