Korzystanie z wtrysku zależności w programie ASP.NET MVC3 Model Binder
Pracuję na stronie MVC3, próbując użyć Ninject do rozwiązania moich zależności. Mam następujący scenariusz:
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;
}
}
zauważyłeś skomentowane linie kodu?
Rejestruję segregatorGlobal.asax
tak jak
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
Więc nie mogę zrobić zastrzyku przez konstrukcję.
UserDataService
ma łańcuch zależności:UserDataService -> UserRepository -> Context
. Dobrze byłoby tutaj użyć Ninject.
Problem polega na tym, kiedy odkomentowałem[Inject]
powyżejuserData
deklaracja i spróbuj uzyskać Ninject, aby wstrzyknąć obiekt jako parametr, nie działa z jakiegoś powodu: otrzymuję zerowe wyjątki referencyjne.
(czy to możliweUserDataService
nie ma interfejsu i wiążę obiekt ze sobą:kernel.Bind<UserDataService>().ToSelf();
??)
Mam inny skomentowany wiersz w kodzie:
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
Kiedy to nie jest komentowane, konfiguracja działa, dostaję poprawne obiekty wstawione, ale teraz jesteśmy zależni od DependencyResolver i to nie jest dużo lepsze niż powiedzenieuserDataService = new UserDataService()
Czy czegoś mi brakuje? Czy istnieje inny sposób wstrzyknięcia obiektu jako parametru i nie wprowadzenia zależności od Ninject lub DependencyResolver?