如何使用Ninject注入静态属性?

时间:2010-11-20 03:15:13

标签: c# asp.net-mvc dependency-injection inversion-of-control ninject

我正在使用ASP.NET MVC 2来实现Web服务,我有一个自定义的JsonResult类:

public abstract class JsonResult : ActionResult
{
    public static ISerializer Serializer { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        var json = Serializer.Serialize(this);
        context.HttpContext.Response.Write(json);
    }
}

JsonResult是应该序列化为JSON数据的所有结果的抽象基类。它使用ISerializer来进行序列化。

我正在使用Ninject作为我的IoC容器。但是,我不确定应该如何注入ISerializer依赖项。我原本是这样做的:

var kernel = new StandardKernel().Bind<ISerializer>().To<JsonNetSerializer>();
JsonResult.Serializer = kernel.Get<ISerializer>();

但有些事情似乎并不恰当。那么我将如何正确地注入Serializer属性呢?我想在应用程序启动时只注入一次。

1 个答案:

答案 0 :(得分:4)

抱歉,MVC不是我的联盟,但是有一些原因导致您无法删除static修饰符,将JsonNetSerializer的生命周期设置为单例,并将其注入到构造函数中JsonResult?特别要注意,这使得对ISerializer的依赖显式(一件好事)并避免static(一件好事)。