使用Redis时,我们ConnectionMultiplexer
从中创建和GetDatabase()
以获得对给定缓存的访问。
我想配置Unity来做到这一点,如下所示:
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
container.RegisterInstance(redis);
container.RegisterType<IDatabase, redis.GetDatabase()>();
但毫不奇怪,它不会编译。
我目前唯一想到的另一种方法是创建一个数据库工厂类,并将其传递给我的控制器而不是IDatabase,但这似乎有点过头了,因为我实际上只是包装了一个包装器:
public static void RegisterComponents() {
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
container.RegisterInstance(redis);
RedisDatabaseFactory redisDbf = new RedisDatabaseFactory(redis);
container.RegisterInstance(redisDbf);
container.RegisterType<IRedisDatabaseFactory, RedisDatabaseFactory>();
}
MyController.cs
public MyController(IRedisDatabaseFactory rdbf){
_db = rdbf.GetDatabase();
}
因此,除了使用这种过于冗长的工厂方法之外,我如何才能使用已注册实例的方法为其他对象创建可注入的依赖关系?
您可以注册IDatabase
使用InjectionFactory
以下方法的工厂方法:
container.RegisterType<IDatabase>(new InjectionFactory(c => redis.GetDatabase()));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句