编程语言
首页 > 编程语言> > c#-将IOC容器用作MVC5的依赖项解析器会抛出“无法创建接口实例”错误

c#-将IOC容器用作MVC5的依赖项解析器会抛出“无法创建接口实例”错误

作者:互联网

我试图简单地使用IOC容器(目前为ninject)作为MVC5的依赖项解析器.
以前在MVC4,Visual Studio 2012中可以正常工作,但是现在使用VS2013和MVC5,我只是无法让解析器在我的控制器中注入依赖项.这不是ninject特有的,我也尝试过SimpleInjector和Unity -同样的错误

我只希望能够将此类插入我的家庭控制器中.

    public interface ITest
    {
        void dummyMethod();
    }


     public class Test : ITest
    {
            public void dummyMethod()
            {
            };
    }

这是依赖解析器

 public class NinjectDependencyResolver : IDependencyResolver
    {
        private IKernel kernel;
        public NinjectDependencyResolver()
        {
            kernel = new StandardKernel();
            AddBindings();
        }
        public object GetService(Type serviceType)
        {
        return kernel.TryGet(serviceType);
        }


            public IEnumerable<object> GetServices(Type serviceType)
            {
                 return kernel.GetAll(serviceType);
            }
            private void AddBindings()
            {
                kernel.Bind<ITest>().To<Test>();

            }
    }

这是global.asax.cs

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            DependencyResolver.SetResolver(new NinjectDependencyResolver());
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }

这是我的HomeController

public class HomeController : Controller
{
    public ActionResult Index(ITest test)
    {
        return View();
    }
}

但是当我运行这个我不断

Server Error in '/' Application.
Cannot create an instance of an interface. 

我也尝试过创建一个全新的项目(MVC 5)-同样的错误

我尝试过MVC5,然后又升级到5.2.2.同样的错误

任何帮助,不胜感激.我认为,即使我在其中设置了断点,也永远不会由于某些原因调用解析器

  kernel.Bind<ITest>().To<Test>();

它确实停在那里….不知道发生了什么事:(

解决方法:

通常,您不能将参数注入到操作方法中.

您需要将依赖项注入到constroller的构造函数中:

public class HomeController : Controller
{
    private readonly ITest test;

    public HomeController(ITest test)
    {
        this.test = this;
    }

    public ActionResult Index()
    {
        //use test here
        return View();
    }
}

标签:ninject,c,asp-net-mvc
来源: https://codeday.me/bug/20191121/2049339.html