我试图使用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/wiki。
Func<>
和接口工厂都需要工厂扩展。