私のペットプロジェクトでは、タービンをDIコンテナとして使用する方法を学ぼうとしています。
私はそのようなロケータープロバイダーとして団結を登録しています:
static MvcApplication()
{
ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());
}
私のユーザーリポジトリにはパラメータのないコンストラクタがあり、次のように登録しています。
public class UserRepositoryRegistration : IServiceRegistration
{
public void Register(IServiceLocator locator)
{
locator.Register<IUserRepository, UserRepository>();
}
}
次に、IUserRepositoryを受け入れる必要があるHomeControllerがあります
public class HomeController : Controller
{
private readonly IUserRepository userRepository;
public HomeController(IUserRepository repository)
{
userRepository = repository;
}
}
(上記のコードスニペットのように)パラメーターのないctorを省略すると、次のようになります(ここで完全になります)。
'/'アプリケーションのサーバーエラー。 このオブジェクトにはパラメーターなしのコンストラクターは定義されていません。 説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。 例外の詳細:System.MissingMethodException:このオブジェクトにパラメーターなしのコンストラクターが定義されていません。 [InvalidOperationException:タイプ'Boris.BeekProject.Guis.Web.Controllers.HomeController'のコントローラーを作成しようとしたときにエラーが発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認してください。]
したがって、私のHomeControllerには、パーレスctorが必要です。インスタンス化するのはUnityコントローラーファクトリではなく、デフォルトのファクトリのようです。
更新
私のMVCApplicationはTurbineApplicationを継承していますが、RouteRegistrationが正常に取得されているため、問題は別の場所にあると思います。
更新
ThomasEydeが提案したように、TurbineApplication.AutoComponent
メソッドをオーバーライドしたかったのですが、オブジェクトブラウザーを確認すると、このメソッドへの参照が見つかりません。さらに、NerdDinnerの例を見ると、このメソッドもオーバーライドしていないようです。それについてのオンラインドキュメントを確認した後、私は賢明なものを得ることができず、手動で登録を行うことに関するドキュメントへのリンクをたどると、プレースホルダーページが表示されます。誰かが私が間違っていることについて私に記入できますか?
私は何かが足りないのですか?