Как использовать 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>();