1

私のペットプロジェクトでは、タービンを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の例を見ると、このメソッドもオーバーライドしていないようです。それについてのオンラインドキュメントを確認した後、私は賢明なものを得ることができず、手動で登録を行うことに関するドキュメントへのリンクをたどると、プレースホルダーページが表示されます。誰かが私が間違っていることについて私に記入できますか?

私は何かが足りないのですか?

4

2 に答える 2

1

TurbineApplication.AutoComponentSetup次のように、-methodをオーバーライドする必要があります。

protected override void AutoComponentSetup(IServiceLocator locator)
{
    //Remove this if you want to skip all other previous registrations
    base.AutoComponentSetup(locator);

    AutoRegistration<IMyCustomInterface>((loc, type) => loc.Register<IMyCustomInterface>(type));
}

コンポーネントの自動登録も参照してください

于 2009-12-08T19:02:00.340 に答える
1

Turbineのビルドは、コントローラーを作成するための追加のパラメーターをサポートするようにControllerFactoryが変更されたMVC2をサポートしていません。これが、コントローラーが正しくインスタンス化されない理由を説明しています。MVC2の重大な変更には、この変更が記載されています。

開発にMVC2Beta(.NET4用)を使用したい場合は、 リリースしたばかりの新しいMVC2(.NET4)ビットを入手することをお勧めします。

それがあなたを助けることを願っています!

于 2009-12-17T15:09:04.900 に答える