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 のコードを既に組み込んでいます) が、解決策は見つかりませんでした。この例外が目の前にある限り、プロジェクトが変換されたとは考えられません。
合理的であると思われるすべてのコードとメッセージを含めました。洞察をいただければ幸いです。もっと見る必要がある場合は、私に知らせてください。
前もって感謝します。