0

ASP.NET MVC3 (LinqToSQL、EntityFramework) プロジェクトを MVC4 に変換中です。VS2012 で新しい MVC4 プロジェクトを作成し、パッケージを追加し、ビューやコントローラーなどをコピーしました。

次のように、リポジトリを使用するコントローラーにアクセスしようとする場合を除いて、ほとんどのことが正常に機能しているようです。

public class CustomerController : Controller
{
    private ICustomerRepository _cr;

    public CustomerController()
    {
        this._cr = new CustomerRepository(TTDataProvider.DB);
    }

    public CustomerController(ICustomerRepository customerRepository)
    {
        this._cr = customerRepository;
    }

私がVS2012でデバッグしている場合、例外は次のとおりです。「タイプCustomerControllerのインスタンスを取得しようとしているときにアクティベーションエラーが発生しました。例外は Microsoft.Practices.ServiceLocation.Activation 型であり、内部例外は次のとおりです。 =null"}.

私のIoCコードは次のとおりです。

using StructureMap;
using FluentSecurity;
using System.Diagnostics;
namespace TTLW {
    public static class IoC {
        public static IContainer Initialize() {
            ObjectFactory.Initialize(x =>
                        {
                            x.Scan(scan =>
                                    {
                                        scan.TheCallingAssembly();
                                        scan.WithDefaultConventions();
                                        scan.AddAllTypesOf<IPolicyViolationHandler>();
                                    });
                        });
            return ObjectFactory.Container;
        }
    }
}

そして、ここに StructureMapMVC.cs があります

using System.Web.Http;
using System.Web.Mvc;
using StructureMap;
using TTLW.DependencyResolution;

[assembly: WebActivator.PreApplicationStartMethod(typeof(TTLW.App_Start.StructuremapMvc), "Start")]

namespace TTLW.App_Start {
    public static class StructuremapMvc {
        public static void Start() {
            IContainer container = IoC.Initialize();
            DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
            GlobalConfiguration.Configuration.DependencyResolver = DependencyResolver.Current.ToServiceResolver();
        }
    }
}

私が言うように、これはすべて私の MVC3 アプリケーションで問題なく動作していました (もちろん、StructureMap の MVC3 バージョンを使用していましたが)。

例外が発生したら、続行することを選択すると、すべてが機能します (つまり、コントローラーの機能)。これは、「デバッグ」ではなく「デバッグなしで開始」を選択することで確認できます。これを行うと、例外はスローされず、設計どおりに機能します。

Phil Haack、Brett Allred などの投稿を検索して見つけました (実際、StructureMapMVC の最後の行に Allred のコードを既に組み込んでいます) が、解決策は見つかりませんでした。この例外が目の前にある限り、プロジェクトが変換されたとは考えられません。

合理的であると思われるすべてのコードとメッセージを含めました。洞察をいただければ幸いです。もっと見る必要がある場合は、私に知らせてください。

前もって感謝します。

4

0 に答える 0