Usando injeção de dependência no fichário de modelo do asp.net MVC3
Estou trabalhando no site do MVC3, tentando usar o Ninject para resolver minhas dependências. Eu tenho o seguinte cenário:
public class UserModelBinder : IModelBinder
{
//[Inject]
public UserDataService userData { get; set; }
public object BindModel(
ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
Guid UserID =
(Guid)Membership.GetUser().ProviderUserKey;
//userDataService = DependencyResolver.Current
// .GetService<UserDataService>();
User user = userDataService.GetUser(UserID);
return user;
}
}
notou as linhas de código comentadas?
Eu registro o fichário emGlobal.asax
Como
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
Então eu não posso realmente fazer injeção através da construção.
UserDataService
tem uma cadeia de dependências:UserDataService -> UserRepository -> Context
. Então seria bom usar o Ninject aqui.
O problema é que quando eu descomente[Inject]
acimauserData
declaração, e tente obter Ninject para injetar objeto como um parâmetro, ele não funciona por algum motivo: eu recebo exceções de referência nula.
(será queUserDataService
não tem uma interface e estou ligando o objeto a si mesmo:kernel.Bind<UserDataService>().ToSelf();
??)
Eu tenho outra linha comentada no código:
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
Quando isso é descomentado, a configuração funciona, recebo objetos corretos inseridos, mas agora dependemos do DependencyResolver e isso não é muito melhor do que dizeruserDataService = new UserDataService()
Estou esquecendo de algo? Existe outra maneira de injetar um objeto como parâmetro e não introduzir dependência em Ninject ou DependencyResolver?