Unité: Impossible d'enregistrer le type de montage différent

Je suis en train de mettre en œuvre Dependency injection dans mon application MVC. Je suis en utilisant Unity.Mvc3.dll pour le Cio. Je me demandais comment l'Unité ne peut pas enregistrer les Types à partir d'une autre assemblée. Voici le code:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    var container = new UnityContainer();

    //ok: register type from this assembly
    container.RegisterType<IMessages, Messages>();

    //fail: register type from another assembly (service reference)
    container.RegisterType<IPlayerService, PlayerService>();

    DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}

public class UnityDependencyResolver : IDependencyResolver
{
    private readonly IUnityContainer _container;

    public UnityDependencyResolver(IUnityContainer container)
    {
        this._container = container;
    }

    public object GetService(Type serviceType)
    {
        try
        {
            return _container.Resolve(serviceType);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {
            return _container.ResolveAll(serviceType);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

Utilisation dans le MVC Contrôleur:

[Dependency]
public IPlayerService PlayerService { get; set; }

[Dependency]
public IMessages Messages { get; set; }


public ActionResult Index()
{
    PlayerMessageViewModel vm = new PlayerMessageViewModel();
    vm.Messages = Messages; //success!
    vm.Players = PlayerService.Get(); //fail: null reference exception :PlayerService

    return View(vm);
}

PlayerService est toujours nulle, tandis que le Messages est OK.

Ici est la PlayerService Classe

public class PlayerService : IPlayerService
{
    private readonly MyDbEntities _dbContext;

    public PlayerService()
    {
        _dbContext = new MyDbEntities();
    }

    public PlayerService(MyDbEntities dbContext)
    {
        _dbContext = dbContext;
    }


    public IQueryable<Player> Get()
    {
        return _dbContext.Players.AsQueryable();
    }
}

c'est le Message d'Erreur

Résolution de la dépendance à l'échec, type = "System.Web.Mvc.IControllerFactory", nom = "(aucun)".

Exception s'est produite lors: lors de la résolution d'.

Exception: exception InvalidOperationException - Le type de courant, Système.Web.Mvc.IControllerFactory, est une interface ne peut pas être construit. Êtes-vous manque un type de la cartographie?

OriginalL'auteur lincx | 2012-06-12