I am trying to implement Dependency injection in my MVC application. I am using Unity.Mvc3.dll for IoC. I'm just wondering how Unity cannot register types from another assembly. Here is the 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; } } }
Use in MVC:
[Dependency] public IPlayerService PlayerService { get; set; } [Dependency] public IMessages Messages { get; set; } public ActionResult Index() { PlayerMessageViewModel vm = new PlayerMessageViewModel(); vm.Messages = Messages;
PlayerService always zero as long as messages are in order.
Here is the PlayerService Class
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(); } }
this is a complete error message
Dependency resolution failed, type = "System.Web.Mvc.IControllerFactory", name = "(none)".
An exception occurred when: at resolution.
Exception: InvalidOperationException. The current type, System.Web.Mvc.IControllerFactory, is an interface and cannot be constructed. Do you miss type mapping?
lincx
source share