Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Ninject注入静态属性?_C#_Asp.net Mvc_Dependency Injection_Inversion Of Control_Ninject - Fatal编程技术网

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

C# 如何使用Ninject注入静态属性?,c#,asp.net-mvc,dependency-injection,inversion-of-control,ninject,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 = Seri

我正在使用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数据的结果的抽象基类。它使用SAN
ISerializer
进行序列化

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

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

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

对不起,MVC不是我的职业,但是有什么原因不能删除
静态
修饰符,将
JsonNetSerializer
的生存期设置为singleton,并将其注入
JsonResult
的构造函数中?请特别注意,这使得对
ISerializer
的依赖显式(一件好事),并避免
静态(一件好事)。

因此,这是否意味着为了将
序列化器
属性保持为单例,我必须始终使用IoC容器来实例化
JsonResult
?@Daniel T:最好使用工厂。因此,如果您有一个实例化
ConcreteJsonResult
的类,它应该采用
JsonResultFactory
。当然,您可以按照
return kernel.Get()的思路创建
JsonResultFactory.Create
。谢谢杰森。我一直避免创建工厂,因为我的应用程序非常简单,使用工厂似乎不必要地使事情复杂化,但我想我会尝试一下。使用工厂通常是解决许多有关依赖注入的问题的答案;-)