web-dev-qa-db-ja.com

asp.net MVC 5のStructureMapを構成する方法

エラーが発生しています。 asp.net mvc 4のように設定しました。

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

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

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

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

17
Naveen

次の手順でうまくいきました。

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

    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. ConcreteDependencyHomeControllerに正常に挿入されました。
40
Darin Dimitrov

最新のStructureMap for MVC 5パッケージを使用してこれを機能させる方法を示す詳細なウォークスルーがあります: 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 -

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

10
ssmith

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

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

従わなければならない場合、すべての steps のリストを以下に示します。

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

それが役に立てば幸い。

1
LeftyX