如何使用 Ninject 将初始化实例传递给 Web API 控制器的构造函数
How to use Ninject to pass Initialized Instance into Web API Controller's Constructor
我正在尝试使用 Ninject 将依赖项注入自托管 Web API 控制器。我成功注入依赖如下:
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"
};
我期望的是从 Controller 的 Get 操作方法中得到 "Dummy" 输出字符串,
private ITestAlert _testAlert = null;
public ValuesController(ITestAlert testAlert)
{
_testAlert = testAlert;
}
public string Get()
{
return _testAlert.Fullname;
}
可是,我只能得到一个"null"return!您能否建议如何将初始化的实例传递给控制器的构造函数。谢谢。
添加专用绑定应该可以解决问题:
kernel.Bind<ITestAlert>()
.ToConstant(new TestAlert{FullName = Dummy"}).WhenInjectedInto<ValuesController>();
我正在尝试使用 Ninject 将依赖项注入自托管 Web API 控制器。我成功注入依赖如下:
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"
};
我期望的是从 Controller 的 Get 操作方法中得到 "Dummy" 输出字符串,
private ITestAlert _testAlert = null;
public ValuesController(ITestAlert testAlert)
{
_testAlert = testAlert;
}
public string Get()
{
return _testAlert.Fullname;
}
可是,我只能得到一个"null"return!您能否建议如何将初始化的实例传递给控制器的构造函数。谢谢。
添加专用绑定应该可以解决问题:
kernel.Bind<ITestAlert>()
.ToConstant(new TestAlert{FullName = Dummy"}).WhenInjectedInto<ValuesController>();