从主视图局部视图访问Ninject对象

时间:2013-04-03 12:34:21

标签: c# asp.net-mvc-4 dependency-injection ninject

我正在尝试在布局视图中访问由ninject创建的对象,但我不知道如何访问它们。

以下是我迄今为止所尝试的内容的简要概述: -

由服务创建并绑定它们:

public interface IService 
{
    void SomeMethod();
}

public class Service : IService
{
    public void SomeMethod
    {

    }
}

Bind<IService>().To<Service>();

创建一个静态类并使用[Inject]属性:

public static class MasterLayout
{
    [Inject]
    public static IService Service { private get; set; }

    public static void CallSomeMethod();
    {
        Service.SomeMethod
    }
}

每当我从我的主视图或部分视图中调用MasterLayout.CallSomeMethod()时,Service字段始终为空。

这是否可能,或者我应该创建一个基本控制器并让其他控制器继承它,我可以在那里设置要在主视图和部分视图中使用的值?有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

如果与构造函数注入一起使用,Ninject是否有效?

(见http://ninject.codeplex.com/wikipage?title=Injection%20Patterns

这样的东西
    IUnitOfWork UnitOfWork;

    public AccountController(IUnitOfWork unitOfWork)
    {
        this.UnitOfWork = unitOfWork;
    }

你在这里查过吗?

bind to property always return null

当你说“在每一页上”时,你的意思是“在每个控制器上”?

如果是,我认为您可以创建一个BaseController类,并且所有控制器都应该继承它。我正在使用这种方法。

答案 1 :(得分:0)

您必须创建一个custom controller factory才能让Ninject创建控制器。一旦你这样做,这将有效。这个可能还有an extension