Я новичок в 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.