Structuremap не работает на MVC4

Я использовал StructureMap в MVC2/3 много раз без каких-либо проблем, но я предполагаю, что обработка IoC отличается в MVC4. Когда я использую StructureMap для обработки IoC в MVC4, я получаю следующее исключение:

Для этого объекта не определен конструктор без параметров

Почему? В google я не нашел ни одного правильного результата, кроме этого: IoC не работает в MVC4 Вот мои IoC классы:

public static class IoC {
    public static IContainer Initialize() {
        ObjectFactory.Initialize(x =>
                    {
                        x.Scan(scan =>
                        {
                            //scan.Assembly("DLL.Core");
                            scan.Assembly("DLL.CMS");
                            scan.TheCallingAssembly();
                            scan.WithDefaultConventions();
                        });
                        x.For().Use();
                        x.For(typeof(IRepository<>)).Use(typeof(Repository<>));
                        x.For();
                        x.For();
                    });

        return ObjectFactory.Container;
    }

И SmDependencyResolver:

    public class SmDependencyResolver : IDependencyResolver
{
    private readonly IContainer _container;

    public SmDependencyResolver(IContainer container)
    {
        _container = container;
    }

    public object GetService(Type serviceType)
    {
        if (serviceType == null) return null;
        try
        {
            return serviceType.IsAbstract || serviceType.IsInterface
                     ? _container.TryGetInstance(serviceType)
                     : _container.GetInstance(serviceType);
        }
        catch
        {

            return null;
        }
    }

    public IEnumerable GetServices(Type serviceType)
    {
        return _container.GetAllInstances(serviceType).Cast();
    }
}

И моя ошибка:

Для этого объекта не определен конструктор без параметров. Описание: Во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите стек трассировку для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Детали исключения: System.MissingMethodException: Для этого объекта не определен конструктор без параметров.

Исходная ошибка:

Не обработанное исключение было сгенерировано во время выполнения текущего веб-запроса. Информацию о происхождении и местоположении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[MissingMethodException: Не определен конструктор без параметров для этого объекта]. System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241 System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67

[InvalidOperationException: Произошла ошибка при попытке создать контроллер типа 'Parsian.Web.Areas.Dashboard.Controllers.MemberController'. Убедитесь что контроллер имеет публичный конструктор без параметров]
. System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +182
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +196 System.Web.Mvc.c__DisplayClass6.b__2() +49 System.Web.Mvc.c__DisplayClassb1.b__a() +13 System.Web.Mvc.SecurityUtil.b__0(Action f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func
1 func) +124 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8862676 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

Спасибо за правильные ответы.

11
задан Jason 22 October 2012 в 15:11
поделиться