Как использовать Ninject для передачи инициализированного экземпляра в конструктор контроллера Web API

Я пытаюсь использовать Ninject для внедрения зависимости в Self-host Web API Controller. У меня есть успех, чтобы ввести зависимость следующим образом:

    public static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();

        try
        {
            kernel.Bind<ITestAlert>().To<TestAlert>();
            return kernel;
        }
        catch (Exception)
        {
            throw;
        }
    }

а также

    var server = WebApp.Start(baseAddress, (appBuilder) =>
    {
        // Configure Web API for self-host.
        var config = new HttpConfiguration();

        config.DependencyResolver = new NinjectResolver(NinjectConfig.CreateKernel());

        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
        );
        appBuilder.UseWebApi(config);
    });

Тем не менее, я хочу передать инициализированный экземпляр извне в конструктор контроллера. Например, я инициализировал экземпляр

public interface ITestAlert
{
    string Fullname { get; set; }
}

а также

public class TestAlert : ITestAlert
{
    private string _fullname;

    public string Fullname
    {
        get
        {
            return _fullname;
        }
        set
        {
            _fullname = value;
        }
    }
}

Экземпляр инициализируется как

public ITestAlert _testAlert;

_testAlert = new TestAlert
{
    FullName = "Dummy"
};

То, что я ожидаю, это получить "пустую" выходную строку из метода действия Get контроллера,

 private ITestAlert _testAlert = null;

 public ValuesController(ITestAlert testAlert)
 {
     _testAlert = testAlert;
 }

 public string Get()
 {
     return _testAlert.Fullname;
 }

Тем не менее, я могу получить только "нулевой" возврат! Не могли бы вы посоветовать, как передать инициализированный экземпляр в конструктор контроллера. Благодарю.

1 ответ

Решение

Добавление выделенной привязки должно помочь:

kernel.Bind<ITestAlert>() .ToConstant(new TestAlert{FullName = Dummy"}).WhenInjectedInto<ValuesController>();

Другие вопросы по тегам