在共享视图中使用ninject绑定接口

时间:2015-10-29 14:30:49

标签: asp.net-mvc ninject

我使用ninject将我的接口绑定到我的存储库,如你所见:

  private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<CMSDataContext>().To<CMSDataContext>().InRequestScope();
            kernel.Bind<IUserRepository>().To<UserRepository>().InRequestScope();
            kernel.Bind<INewsRepository>().To<NewsRepository>().InRequestScope();
            kernel.Bind<IConfigurationRepository>().To<ConfigurationRepository>().InRequestScope();


        } 

例如,您可以在此处看到home controller

的结构
 public class HomeController : Controller
    {
        //
        // GET: /fa/Home/

        private IConfigurationRepository _configurationRepository;
        public HomeController(IConfigurationRepository configurationRepository)
        {
            _configurationRepository = configurationRepository;
        }

        public ActionResult Index()
        {
            ViewBag.Configuration = _configurationRepository.GetConfiguration().First();
            return View();
        }

    }

但我需要在我的shared view中调用一个界面,我的意思是masterpage,如您所见:

<head>
    @{
        IConfigurationRepository _iconfigurationRepository;
    }
    <!-- Basic -->
    <title>@ViewBag.Configuration.Title</title>

    <!-- Define Charset -->
    <meta charset="utf-8" />

我的问题是我如何使用ninject将此界面绑定到其存储库,我的意思是configurationRepository

1 个答案:

答案 0 :(得分:-1)

如果需要在视图中解析依赖关系,可以使用dependencyResolver。

在你的剃须刀视图中:

@{
    var config = DependencyResolver.Current.GetService<IConfigurationRepository >(); 
}

在这种情况下,如果ninject可以解析构造函数参数,那么ninject是当前依赖项解析器,您可以在视图,过滤器,控制器等中使用。