ninject を使用すると、特定の実装にバインドできることがわかります。
ISomeCache myCache = Ninject.Get<ISomeCache>();
ninject をバインドする具体的な実装をロードします。
データベース (Web アプリケーション) で使用する具体的な実装を保存し、管理パネルでそれを変更すると、その場で必要なクラスを使用する必要があるとします。
これは可能ですか?
実行しているコンテキストを特定できる限り、実行できます。
kernel.Bind<IMyService>().To<MyUserService>().When(request => GetSiteContext() == "user");
kernel.Bind<IMyService>().To<MyAdminService>().When(request => GetSiteContext() == "admin");
ここで、GetSiteContext は、実行中のコンテキストを判別するために作成するメソッドです。.When(...)
はパラメータとして a を受け取りFunc<IRequest,bool>
ます ( に等しいPredicate<IRequest>
)。