Castle Windsor解析类型的时候报错,原因在于需要解析的类型的构造函数中所需变量未注册,可以转到该类型的构造函数中看哪个未注册,注册后即可解析。
使用Castle Windsor构造StackExchange.Redis.Extensions中的IRedisCacheClient操作redis示例如下:
var redisConfiguration = new RedisConfiguration()
{
AbortOnConnectFail = true,
//KeyPrefix = "_my_key_prefix_",
Hosts = new RedisHost[]
{
//new RedisHost(){Host = "192.168.0.10", Port = 6379},
//new RedisHost(){Host = "192.168.0.11", Port =6379},
new RedisHost(){Host = "127.0.0.1", Port =6379}
},
AllowAdmin = true,
ConnectTimeout = 3000,
Database = 0,
Ssl = false,
//Password = "",
ServerEnumerationStrategy = new ServerEnumerationStrategy()
{
Mode = ServerEnumerationStrategy.ModeOptions.All,
TargetRole = ServerEnumerationStrategy.TargetRoleOptions.Any,
UnreachableServerAction = ServerEnumerationStrategy.UnreachableServerActionOptions.Throw
}
};
var container = new WindsorContainer();
container.Register(Component.For<IRedisCacheClient>()
.ImplementedBy<RedisCacheClient>()
.LifestyleSingleton());
container.Register(Component.For<ISerializer>()
.ImplementedBy<NewtonsoftSerializer>()
.LifestyleSingleton());
container.Register(Component.For<IRedisCacheConnectionPoolManager>()
.ImplementedBy<RedisCacheConnectionPoolManager>()
.LifestyleSingleton());
container.Register(Component.For<RedisConfiguration>().LifestyleSingleton().Instance(redisConfiguration));
container.Register(Component.For<IRedisDefaultCacheClient>()
.ImplementedBy<RedisDefaultCacheClient>()
.LifestyleSingleton());
var cacheClient = container.Resolve<IRedisCacheClient>();
bool added = cacheClient.Db0.Add("key", "value", DateTimeOffset.Now.AddMinutes(10));