c# - 如何使用 Ninject 注入(inject)静态属性?

标签 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 容器。但是,我不太确定应该如何注入(inject) ISerializer 依赖项。我最初是这样做的:

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

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

最佳答案

抱歉,MVC 不是我的菜,但是有什么原因导致你不能删除 static 修饰符,将 JsonNetSerializer 的生命周期设置为单例,并且有注入(inject)到 JsonResult 的构造函数中?请特别注意,这使得对 ISerializer 的依赖变得明确(一件好事)并避免了 static(一件好事)。

关于c# - 如何使用 Ninject 注入(inject)静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4231028/

相关文章:

c# - 月、日和年的正则表达式反向引用?

C# 事件和委托(delegate)

asp.net-mvc - 请求 .html 文件时调用 ASP.NET MVC Controller

java - 这是依赖注入(inject)的正确用法吗

gradle - 如何以 Gradle 推荐的方式在 Gradle Plugin 中注入(inject)依赖项?

Grails:常规 Groovy 类中的依赖注入(inject)

c# - 如何将事件发送到 Windows Workflow 4 状态机以推进状态?

c# - 仅在上一个 Elapsed 事件完成后才触发 Timer 事件? [C#]

asp.net-mvc - 将进度信息从 WCF 发送到浏览器的最佳方式是什么?

c# - 我如何优化此 actionresult 以获得更好的性能?我需要在何时从 url 等获取 "GET"XML 数据时设置一个计时器