C# 如何使用Ninject注入静态属性?
我正在使用ASP.NET MVC 2实现一个web服务,我有一个自定义的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
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数据的结果的抽象基类。它使用SANISerializer
进行序列化
我正在使用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
代码>。谢谢杰森。我一直避免创建工厂,因为我的应用程序非常简单,使用工厂似乎不必要地使事情复杂化,但我想我会尝试一下。使用工厂通常是解决许多有关依赖注入的问题的答案;-)