私は 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 参照例外が発生します。
(インターフェイスがなく、オブジェクトをそれ自体にバインドしている可能性があります: ??UserDataService
kernel.Bind<UserDataService>().ToSelf();
)
コードに別のコメント行があります。
userDataService = DependencyResolver.Current
.GetService<UserDataService>();
これがコメント解除されると、セットアップが機能し、正しいオブジェクトが挿入されますが、現在は DependencyResolver に依存しており、それは言うよりもはるかに優れているわけではありませんuserDataService = new UserDataService()
何か不足していますか?オブジェクトをパラメーターとして注入し、Ninject または DependencyResolver への依存関係を導入しない別の方法はありますか?