IControllerFactory 'MefContrib.Web.Mvc.CompositionControllerFactory' не вернул контроллер для имени 'Home' - PullRequest
1 голос
/ 16 февраля 2012

Я новичок в DI через ASP.NET MVC 3. и я использую mefcontrib в качестве контейнера DI.Я устанавливаю mefcontrib и mefcontrib.mvc3 через nuget.и когда я пытаюсь запустить проект, я получаю эту ошибку:

IControllerFactory 'MefContrib.Web.Mvc.CompositionControllerFactory' не возвращает контроллер для имени 'Home'.

Я погуглил ошибку и ищу и снова.но я ничего не могу найти!все могут помочь мне, пожалуйста?вот содержимое App_Start, созданное nuget автоматически:

[assembly: WebActivator.PreApplicationStartMethod(typeof(AlamKouh.UI.App_Start.AppStart_MefContribMVC3), "Start")]

namespace AlamKouh.UI.App_Start
{
    using System.ComponentModel.Composition.Hosting;
    using System.Linq;
    using System.Web.Mvc;
    using MefContrib.Hosting.Conventions;
    using MefContrib.Web.Mvc;

    public static class AppStart_MefContribMVC3
    {
        public static void Start()
        {
            CompositionContainerLifetimeHttpModule.Register();

            var catalog = new AggregateCatalog(
                new DirectoryCatalog("bin"),
                new ConventionCatalog(new MvcApplicationRegistry()));

            var dependencyResolver = new CompositionDependencyResolver(catalog);
            DependencyResolver.SetResolver(dependencyResolver);

            ControllerBuilder.Current.SetControllerFactory(
                new CompositionControllerFactory(
                    new CompositionControllerActivator(dependencyResolver)));

            FilterProviders.Providers.Remove(FilterProviders.Providers.Single(f => f is FilterAttributeFilterProvider));
            FilterProviders.Providers.Add(new CompositionFilterAttributeFilterProvider(dependencyResolver));

            ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.OfType<DataAnnotationsModelValidatorProvider>().Single());
            ModelValidatorProviders.Providers.Add(
                new CompositionDataAnnotationsModelValidatorProvider(dependencyResolver));

            ModelBinderProviders.BinderProviders.Add(
                new CompositionModelBinderProvider(dependencyResolver));
        }
    }
}

, и это мой HomeController:

namespace AlamKouh.UI.Controllers {

    public interface ITest<T> { }

    [Export(typeof(ITest<>))]
    public class Test<T> : ITest<T> { }

    public class HomeController : Controller {

        private readonly ITest<string> _test;

        [ImportingConstructor]
        public HomeController(ITest<string> test) {
            _test = test;
        }

        public ActionResult Index() {
            var t = _test;
            return View();
        }
    }
}

ОБНОВЛЕНИЕ:

@Yorgo предложи мне перейти на StructureMap и я сделаю это.StructureMap мне проще, поэтому я принимаю ответ @ Yorgo.

1 Ответ

0 голосов
/ 16 февраля 2012

Лучшим и самым быстрым DI-контейнером является StructureMap.Я предлагаю вам использовать это.Если вы хотите использовать его, я могу помочь вам с настройками

...