ASP.NET MVC4 StructureMap ExceptionCode202

时间:2013-05-11 22:58:02

标签: asp.net-mvc-4 structuremap

我正在将ASP.NET MVC3(LinqToSQL,EntityFramework)项目转换为MVC4。我在VS2012中创建了一个新的MVC4项目,添加了包,复制了我的视图,控制器等。

除非我尝试访问使用Respository的控制器,否则大多数事情似乎都能正常工作,如下所示:

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类型,内部异常是:“StructureMap异常代码:202 \ nNoo为PluginFamily定义的默认实例TTLW.Models.TTLWDataContext,TTLW,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 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应用程序中都没有问题(尽管我当然使用的是结构图的MVC3版本)。

一旦我遇到异常,如果我只是选择继续那么一切正常(即控制器功能);通过选择“Start Without Debugging”而不是“Debug”来确认这一点。当我这样做时,没有抛出任何异常,事情按设计工作。

我搜索过Phil Haack,Brett Allred和其他人的帖子(事实上我已经将Allred的代码整合到StructureMapMVC的最后一行),但还没有找到解决方案。只要这个例外让我盯着我,我就不能认为这个项目是转换的。

我已经包含了我认为合理的所有代码和消息,并希望获得任何见解。如果您需要了解更多,请告诉我。

提前致谢。

0 个答案:

没有答案