2016-12-13 7 views
0

두 개의 다른 컨트롤러가있는 웹 응용 프로그램이 있으며 컨트롤러에 대한 입력으로 구성 파일을 사용합니다. 이전에 나는 하나의 설정 파일을 사용하고 있었고 그 파일을 커널에 바인딩 할 수 있었고 모든 것이 잘 작동했다. 이제는 두 개의 별도 설정 파일을 사용하고 어떤 파일을 사용할 지 이해할 필요가 있습니다. 여기에 내가 어떻게 할 것인지 생각한 예가있다. 내가 한 명만 가지고있을 때 구성을 바인딩하기 전에 한 일은 논평의 대상이됩니다.Ninject는 Global.asax에서 같은 유형의 두 가지 매개 변수를 바인딩합니다.

 var kernel = NinjectWebApi.Kernel; 
     //get base dependency instances from the container 
     var configurationClient = kernel.Get<IConfigurationClient>(); 

     //initialise local dependencies 
     var config1 = configurationClient.Get(new GetConfigurationByKeyRequest("Config1")); 
     var config2 = configurationClient.Get(new GetConfigurationByKeyRequest("Config2")); 

     //bind local dependencies 

//This is what I did when I had just one config 
     //kernel.Bind<IConfiguration>().ToMethod(c => config1.Configuration); 

     kernel.Bind<IMy1Controller>().To<My1Controller>() 
      .WithConstructorArgument("config1", config1.Configuration) 
      .WithConstructorArgument("config2", config2.Configuration); 

      kernel.Bind<IMy2Controller>().To<My2Controller>() 
       .WithConstructorArgument("config2", config2.Configuration); 

     //Set the dependency resolver to use ninject 
     GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 

"WithConstructorArgument"나는 입력을 지정하는 데 사용할 수없는 경우의 목적은 무엇인가?

답변

1

그래, 해결책을 찾았습니다. 그러나 이것이 적절한 방법이라고 확신하지 못합니다.

var kernel = NinjectWebApi.Kernel; 
    //get base dependency instances from the container 
    var configurationClient = kernel.Get<IConfigurationClient>(); 

    //initialise local dependencies 
    var config1 = configurationClient.Get(new GetConfigurationByKeyRequest("Config1")); 
    var config2 = configurationClient.Get(new GetConfigurationByKeyRequest("Config2")); 

    //bind local dependencies 
    kernel.Bind<IConfiguration>().ToMethod(c => config1.Configuration).Named("config1"); 

    kernel.Bind<IConfiguration>().ToMethod(c => config1.Configuration).Named("config1"); 

    kernel.Bind<IMy1Controller>().To<My1Controller>() 

     kernel.Bind<IMy2Controller>().To<My2Controller>() 

    //Set the dependency resolver to use ninject 
    GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 

내가 생성자에서 약간 서명을 변경해야 사용할 하나 알고 Ninject에 만들기 :

public My1Controller([Named("Config1")] IConfiguration config1)