我试图使用ninject来管理我对asp.net web api项目的redis依赖关系。
我这样装订:

 var clientManager = new PooledRedisClientManager("localhost");
 kernel.Bind<IRedisClientsManager>()
    .ToMethod(ctx => clientManager)
    .InSingletonScope();
 kernel.Bind<IRedisClient>()
    .ToMethod(k => k.Kernel.Get<IRedisClientsManager>()
    .GetClient());

如何在项目中的其他类中访问redis客户端?

最佳答案

我不熟悉Redis,所以要小心…
既然有了绑定,就可以将其注入构造函数

public class Foo {
    public Foo(IRedisClient redisClient) {...}
}

或者可以使用func在特定时间访问/创建它:
public class Foo {
    private readonly Func<IRedisClient> redisClientFunc;

    public Foo(Func<IRedisClient> redisClientFunc)
    {
        this.redisClientFunc = redisClientFunc;
    }

    public void DoSomething()
    {
        IRedisClient client = this.redisClientFunc();
        client.SayHello();
    }
}

或者,等效地,您可以使用ninject工厂扩展来实现与func相同的功能,但是使用一个接口,请参见https://github.com/ninject/ninject.extensions.factory/wikiFunc<>和接口工厂都需要工厂扩展。

09-07 01:02