3
我使用ASP.NET MVC 2來實現Web服務,我有一個自定義JsonResult
類:如何使用Ninject注入靜態屬性?
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
屬性呢?我想在應用程序啓動時只注入一次。
因此,這是否意味着,爲了將'Serializer'屬性保持爲單例,我必須始終使用IoC容器來實例化'JsonResult'的實例? – 2010-11-20 03:37:00
@Daniel T .:最好你應該使用一個工廠。所以如果你有一個實例化'ConcreteJsonResult'的類,它應該使用'JsonResultFactory'。當然,你可以沿着'return kernel.Get();'''的方式創建'JsonResultFactory.Create '。 –
jason
2010-11-20 03:43:41
謝謝傑森。我一直避免創建工廠,因爲我的應用程序非常簡單,使用工廠似乎不必要地使事情複雜化,但我想我會試一試。 – 2010-11-20 08:56:00