17

エラーを下回っています。asp.net mvc 4と同様にセットアップしました。

このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.MissingMethodException: このオブジェクトにパラメーターなしのコンストラクターが定義されていません。

最後に、実際の例外「タイプ HomeController、キー "" のインスタンスを取得しようとしているときにアクティベーション エラーが発生しました」が見つかりました。

ホームコントローラーにサービスクラスを注入しようとするとエラーが発生します

4

4 に答える 4

40

次の手順は私にとってはうまくいきました:

  1. Visual Studio 2013 RTM で新しい ASP.NET MVC 5 アプリケーションを作成する
  2. StructureMap.MVC4NuGetをインストールします。

    Install-Package StructureMap.MVC4
    
  3. 新しいインターフェースを作成します。

    public interface IDependency
    {
        string SayHello();
    }
    
  4. このインターフェースを実装します。

    public class ConcreteDepenedency: IDependency
    {
        public string SayHello()
        {
            return "Hello World";
        }
    }
    
  5. HomeController をこのインターフェイスで動作させます。

    public class HomeController : Controller
    {
        private readonly IDependency dependency;
        public HomeController(IDependency dependency)
        {
            this.dependency = dependency;
        }
    
        public ActionResult Index()
        {
            return Content(this.dependency.SayHello());
        }
    }
    
  6. でコンテナーを構成します~/DependencyResolution/Ioc.cs

    using StructureMap;
    using WebApplication1.Controllers;
    
    namespace WebApplication1.DependencyResolution {
    
        public static class IoC {
    
            public static IContainer Initialize() {
    
                ObjectFactory.Initialize(x =>
                {
                    x.For<IDependency>().Use<ConcreteDepenedency>();
                });
    
                return ObjectFactory.Container;
            }
        }
    }
    
  7. でアプリケーションを実行しますCtrl+F5

  8. ConcreteDependencyに正常に注入されましたHomeController
于 2013-10-20T11:51:22.230 に答える
10

MVC 5 パッケージの最新の StructureMap を使用してこれを機能させる方法を示す詳細なウォークスルーがあります: http://ardalis.com/resolving-dependencies-in-asp.net-mvc-5-with-structuremap

以前に公開した ASP.NET MVC 3 で必要だったものとそれほど違いはありません: http://ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3

基本的には、適切な NuGet パッケージをインストールし、依存関係を受け入れるようにコントローラーを変更し、インターフェイスを IoC.cs の実装に接続するだけです。StructureMap のデフォルトの規則に従えば、このワイヤアップを多くのタイプに対して自動的に行うことができます。

于 2014-06-25T15:47:28.577 に答える
1

StructureMap (2.6.4.1) は ASP.NET MVC 5 と互換性があり、アップグレード後に何も変更する必要はありません。

ただし、アップグレード プロセスは、思ったほど簡単ではありません。

従う必要がある場合のすべての手順のリストを次に示します。

PS: アップグレード後に Rick Anderson のチュートリアルに従いました (そして、彼は以前にそれを行うべきだと言っています) が、とにかくうまくいきました。

それが役に立てば幸い。

于 2013-10-21T09:21:33.103 に答える
-4

すべての返信ありがとうございます。最終的に問題が見つかりました。私のサービス クラスでは、アプリの設定を参照しますが、その構造マップがサービス クラスのインスタンスを挿入できなかったため、web.config ファイルでそれを定義しませんでした。

private readonly string _path =
            ConfigurationManager.AppSettings["vp"].ToString(CultureInfo.InvariantCulture);
于 2013-10-22T20:09:20.953 に答える