私は MVC3 Web サイトに取り組んでおり、Ninject を使用して依存関係を解決しようとしています。次のシナリオがあります。
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;
}
}
コードのコメント行に気づきましたか?
バインダーを次のように登録しGlobal.asaxます
ModelBinders.Binders[typeof(User)] = new UserModelBinder();
だから、私は実際に建設を通して注入することはできません.
UserDataService依存関係のチェーンがあります: UserDataService -> UserRepository -> Context. そこでNinjectを使うと良いでしょう。
[Inject]問題は、上記の宣言のコメントを外しuserDataて、Ninject にオブジェクトをパラメーターとして挿入させようとすると、何らかの理由で機能しないことです。null 参照例外が発生します。
(インターフェイスがなく、オブジェクトをそれ自体にバインドしている可能性があります: ??UserDataServicekernel.Bind<UserDataService>().ToSelf(); )
コードに別のコメント行があります。
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
これがコメント解除されると、セットアップが機能し、正しいオブジェクトが挿入されますが、現在は DependencyResolver に依存しており、それは言うよりもはるかに優れているわけではありませんuserDataService = new UserDataService()
何か不足していますか?オブジェクトをパラメーターとして注入し、Ninject または DependencyResolver への依存関係を導入しない別の方法はありますか?