Как интегрировать MEF с ASP.NET MVC 4 и ASP.NET Web API

Как интегрироватьСтруктура управляемой расширяемости (MEF) с ASP.NET MVC 4 и ASP.NET Web API в одном проекте?

Рассмотрим пример приложения с контроллером MVCHomeController и контроллер веб-APIContactController, Оба имеют свойство типаIContactRepository, которые они полагаются на MEF, чтобы решить. Проблема заключается в том, как подключить MEF к MVC и веб-API, чтобы экземпляры создавались с помощью MEF.

HomeController:

/// <summary>
/// Home controller. Instruct MEF to create one instance of this class per importer,
/// since this is what MVC expects.
/// </summary>
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class HomeController : Controller
{
    [Import]
    private IContactRepository _contactRepository = null;

    public ActionResult Index()
    {
        return View(_contactRepository.GetAllContacts());
    }
}

ContactController:

/// <summary>
/// Contact API controller. Instruct MEF to create one instance of this class per importer,
/// since this is what Web API expects.
/// </summary>
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ContactController : ApiController
{
    [Import]
    private IContactRepository _contactRepo = null;

    public Contact[] Get()
    {
        return _contactRepo.GetAllContacts();
    }
}

IContactRepository и ContactRepository:

public interface IContactRepository
{
    Contact[] GetAllContacts();
}

[Export(typeof(IContactRepository))]
public class ContactRepository : IContactRepository
{
    public Contact[] GetAllContacts()
    {
        return new Contact[] {
            new Contact { Id = 1, Name = "Glenn Beck"},
            new Contact { Id = 2, Name = "Bill O'Riley"}
        };
    }
}

Контактное лицо:

public class Contact
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Ответы на вопрос(6)

Ваш ответ на вопрос