I want to use HaveBox for dependency injection. But this is not a question about HaveBox . So I created a basic controller:
public abstract class BaseController : Controller { protected readonly IRepository m_Repository; protected BaseController(IRepository repository) { m_Repository = repository; } }
And my HomeController was inherited from BaseController . Add the HaveBoxConfig.RegisterTypes(); method HaveBoxConfig.RegisterTypes(); in Application_Start , and HaveBoxConfig implementation:
public class HaveBoxConfig { public static void RegisterTypes() { var container = new Container(); container.Configure(config => config.For<IService>().Use<Service>()); container.Configure(config => config.For<IRepository>().Use<Repository>()); IDependencyResolver resolver = DependencyResolver.Current; var newResolver = new MyResolver(container, resolver); DependencyResolver.SetResolver(newResolver); } }
And my resolver:
public class MyResolver : IDependencyResolver { private readonly IContainer m_container; private readonly IDependencyResolver m_resolver; public MyResolver(IContainer container, IDependencyResolver resolver) { m_container = container; m_resolver = resolver; } public object GetService(Type serviceType) { try { return m_container.GetInstance(serviceType); } catch (Exception ex) { return m_resolver.GetService(serviceType); } } public IEnumerable<object> GetServices(Type serviceType) { return m_resolver.GetServices(serviceType); } }
The GetService method calls the following types: IControllerFactory , IControllerActivator , HomeController , but not for my IRepository .
What am I doing wrong? Why is DI not running for IRepository ?
c # dependency-injection asp.net-mvc asp.net-mvc-4 havebox
Redcat
source share