Как мне использовать Ninject, чтобы добавить статическое свойство? - PullRequest
3 голосов
/ 20 ноября 2010

Я использую ASP.NET MVC 2 для реализации веб-службы, и у меня есть специальный 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 Ответ

4 голосов
/ 20 ноября 2010

Извините, MVC - не моя лига, но есть ли какая-то причина, по которой вы не можете удалить модификатор static, установить время жизни JsonNetSerializer как одноэлементное и вставить его в конструктор JsonResult? В частности, обратите внимание, что это делает зависимость от ISerializer явной (хорошая вещь) и избегает static (хорошая вещь).

...