使用其他属性注入ToMethod()?

时间:2016-02-15 15:36:19

标签: c# ninject

我正在注入一个RestSharp IRestClient实例来进行API调用:

kernel.Bind<IRestClient>()
      .ToMethod(context => new RestClient("http://localhost:63146/api/"));

但是,我还需要使用HttpBasicAuthenticator进行身份验证。我目前正在注射这个IAuthenticator

kernel.Bind<IAuthenticator>()
      .ToMethod(context => new HttpBasicAuthenticator("user", "password"));

有没有办法将两者合并,这样我只需要注入IRestClient并且默认情况下附加了身份验证器?

例如,我尝试过类似的事情:

kernel.Bind<IRestClient>()
      .ToMethod(context => 
          new RestClient("http://localhost:63146/api/")
               .Authenticator = new HttpBasicAuthenticator("user", "password"));

但那不是编译。

1 个答案:

答案 0 :(得分:1)

ToMehtod采用常规Func<IContext, T>,您不仅可以创建简单对象,还可以编写任何指定复杂函数。

因此,您可以轻松地将两个调用与:

组合在一起
kernel.Bind<IRestClient>()
    .ToMethod(context => {
        var client = new RestClient("http://localhost:63146/api/");
        client.Authenticator = new HttpBasicAuthenticator("user", "password");
        return client;
    });