如何使用 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>();