初めて依存性注入を使い始めたばかりで、ASP.NET MVC 2WebサイトのIoCコンテナーとしてNinject2.0として使用していますが、対応方法がわからないアクティベーションエラーが発生しています。簡単だと思いますので、あまり考えずに誰かが私を正しい方向に向けてくれることを願っています。
クラスBaseControllerに、IWebsiteSettingsを受け取り、[Inject]属性でフラグが付けられたプロパティがあります。StandardKernelで、次のコードを使用してモジュールをロードします。
public class WebModule : Module
{
public override void Load()
{
Bind<IWebsiteSettings>()
.ToProvider(new WebsiteSettingsProvider(WebConfigurationManager.AppSettings))
.InSingletonScope();
}
}
public class WebsiteSettingsProvider : Provider<WebsiteSettings>
{
private const string WebsiteNameKey = "Website.Name";
private const string ContactFormEmailSubjectKey = "ContactForm.EmailSubject";
private const string ProductImageDirectoryKey = "Products.ImageDirectory";
private const string UploadTempDirectoryKey = "Uploads.TempDirectory";
protected NameValueCollection Settings { get; set; }
public WebsiteSettingsProvider(NameValueCollection settings)
{
Settings = settings;
}
protected override WebsiteSettings CreateInstance(IContext context)
{
return new WebsiteSettings
{
WebsiteName = Settings[WebsiteNameKey] ?? string.Empty,
ContactFormEmailSubject = Settings[ContactFormEmailSubjectKey] ?? string.Empty,
ProductImageDirectory = Settings[ProductImageDirectoryKey] ?? string.Empty,
UploadsTemporaryDirectory = Settings[UploadTempDirectoryKey] ?? string.Empty
};
}
}
これはかなり簡単です。web.configファイルからいくつかのデータをロードし、コントローラー全体で使用できるようにシングルトンオブジェクトに保存しようとしています。Bindの呼び出しは正常に機能しているようで、プロバイダーのSettingsプロパティは、構成ファイルのAppSettingsコレクションで正しく初期化されています。それでも、アプリケーションが最初にロードされるとき:
'/'アプリケーションのサーバーエラー。 SByte*の暗黙的なセルフバインディングを使用したSByte*のアクティブ化中にエラーが発生しました 実装タイプのインスタンスを作成するために使用できるコンストラクターはありませんでした。 アクティベーションパス: 4)型stringのコンストラクターのパラメーター値への依存性SByte*の注入 3)タイプWebsiteSettingsのプロパティWebsiteNameへの依存性文字列の挿入 2)HomeControllerタイプのプロパティWebsiteSettingsへの依存性IWebsiteSettingsの注入 1)HomeControllerのリクエスト 提案: 1)実装タイプにパブリックコンストラクターがあることを確認します。 2)シングルトンパターンを実装している場合は、代わりにInSingletonScope()を使用したバインディングを使用してください。
興味深いことに、ページを更新しても例外は発生せず、Kernel.Get()を呼び出すと正しいオブジェクトが返されます。
何かアドバイス?