MVC3 웹 사이트에서 Ninject를 사용하여 내 종속성을 해결하려고합니다.ASP.NET MVC3 모델 바인더에서 종속성 삽입 사용
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;
}
}
코드의 주석 라인을 발견 : 나는 다음과 같은 시나리오를 가지고?
나는 그래서 정말 건설을 통해 주입 할 수 없습니다
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
로 Global.asax
바인더를 등록 할.
UserDataService
은 종속 관계 체인 UserDataService -> UserRepository -> Context
을가집니다. 그래서 여기서 Ninject를 사용하는 것이 좋을 것입니다.
위의 위의 코드를 userData
선언에서 제거하고 Ninject가 매개 변수로 객체를 삽입하도록 시도하면 문제가 발생합니다. 어떤 이유로 작동하지 않습니다. 널 참조 예외가 발생합니다.
UserDataService
가 인터페이스가없는 나는 그 자체로 객체 결합하고있어 일 수 있었다 : kernel.Bind<UserDataService>().ToSelf();
??)
을 나는 코드의 또 다른 주석 라인이 있습니다
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
을
이것이 주석 처리되지 않았을 때 설정이 제대로 작동하지만 올바른 객체가 삽입되었지만 DependencyResolver에 의존하고 있다고 말하면서도 이상한 것은 아닙니다. userDataService = new UserDataService()
내가 놓친 게 있니? 개체를 매개 변수로 주입하고 Ninject 또는 DependencyResolver에 종속성을 도입하지 않는 다른 방법이 있습니까?
감염이라고합니까? – JConstantine
@JLevett : 그 의존성을 주입하는 방법에 따라 감염 될 수 있습니다 .-) –
+1 "좋은 웃음 오타": –