使用统一注册的实例注入依赖项
本文关键字:实例 注入 依赖 注册 | 更新日期: 2023-09-27 18:27:22
使用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();
}
除了使用这种过于冗长的工厂方法之外,我如何使用注册实例的方法为其他对象创建可注入的依赖关系?
您可以使用InjectionFactory
:为IDatabase
注册工厂方法
container.RegisterType<IDatabase>(new InjectionFactory(c => redis.GetDatabase()));