Reputation: 5962
I'm using Unity DI in my application. I have register my Repositories in UnityConfig.cs
file.
public static void RegisterTypes(IUnityContainer container)
{
// NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
// container.LoadConfiguration();
container.RegisterType<DbContext, RanoChatDbContext>(new HierarchicalLifetimeManager());
container.RegisterType<UserManager<AppUser>>( new HierarchicalLifetimeManager());
container.RegisterType<IUserStore<AppUser>, UserStore<AppUser>>(new HierarchicalLifetimeManager());
container.RegisterType<AccountController>( new InjectionConstructor());
container.RegisterType<IRepositories, Repositories>();
}
and In AccountController
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
private IRepositories repos;
public AccountController()
{
}
public AccountController(ApplicationUserManager userManager,
ApplicationSignInManager signInManager,
IRepositories Repositories)
{
repos = Repositories;
UserManager = userManager;
SignInManager = signInManager;
}
But repos is null
while the same repos was intialized correctly in my HomeController.
IRepositories repos;
public HomeController(IRepositories repos)
{
this.repos = repos;
}
Upvotes: 2
Views: 637
Reputation: 20842
Probably your 3-arg constructor has other types that Unity doesn't know how to inject (ApplicationUserManager, ApplicationSignInManager) because you didn't register those types.
public AccountController(ApplicationUserManager userManager,
ApplicationSignInManager signInManager,
IRepositories Repositories)
Also, it may simply be calling the controller's zero-arg constructor. Tell Unity how you want it to instantiate the controller by registering it with something like:
container.RegisterType<AccountController>(new InjectionConstructor(typeof(Repositories)));
See MSDN - Registering Injected Parameter and Property Values
Upvotes: 2