Verwenden der Abhängigkeitsinjektion in ASP.NET MVC3 Model Binder
Ich arbeite an der MVC3-Website und versuche, mithilfe von Ninject meine Abhängigkeiten aufzulösen. Ich habe folgendes Szenario:
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;
}
}
die kommentierten Codezeilen bemerkt?
Ich melde den Binder anGlobal.asax
wie
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
Also kann ich nicht wirklich durch die Konstruktion spritzen.
UserDataService
hat eine Kette von Abhängigkeiten:UserDataService -> UserRepository -> Context
. Es wäre also gut, Ninject hier zu verwenden.
Das Problem ist, wenn ich das Kommentar auskommentiere[Inject]
überuserData
Deklaration, und versuchen Sie, Ninject zu veranlassen, Objekt als Parameter zu injizieren, funktioniert es aus irgendeinem Grund nicht: Ich erhalte null Referenzausnahmen.
(Könnte es das seinUserDataService
hat keine Schnittstelle und ich binde das Objekt an sich selbst:kernel.Bind<UserDataService>().ToSelf();
??)
Ich habe eine weitere kommentierte Zeile im Code:
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
Wenn dies unkommentiert ist, funktioniert die Einrichtung, ich bekomme korrekte Objekte eingefügt, aber jetzt hängen wir von DependencyResolver ab und das ist nicht viel besser als zu sagenuserDataService = new UserDataService()
Vermisse ich etwas? Gibt es eine andere Möglichkeit, ein Objekt als Parameter einzufügen und keine Abhängigkeit von Ninject oder DependencyResolver einzuführen?