2017-11-08 16 views
0

Ninject를 사용하여 자체 호스트 웹 API 컨트롤러에 종속성을 주입하려고합니다. 나는 다음과 같이 성공 의존성을 주입입니다 :Ninject를 사용하여 초기화 된 인스턴스를 웹 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 ITestAlert _testAlert; 

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

로 초기화

public class TestAlert : ITestAlert 
{ 
    private string _fullname; 

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

초기화가 제어기의 방법,

private ITestAlert _testAlert = null; 

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

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

그러나 "null"반환 만받을 수 있습니다! 컨트롤러의 생성자에 초기화 된 인스턴스를 전달하는 방법을 알려주십시오. 감사. 트릭을 할해야 바인딩 전용

답변

1

추가는이 :

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

+0

이 완벽하게 작동합니다! 고마워. – user1133555

+0

@ user1133555 nice! 대답을 받아들이는 것을 잊지 마라. – jbl

관련 문제