我正在尝试在项目的类中加载绑定。我正在使用第三方扩展进行缓存,并且需要使用c#和.net framework 472加载下面的类。
public class CouchbaseCache : ICouchbaseCache, IDistributedCache
{
public CouchbaseCache(ICouchbaseCacheBucketProvider provider, IOptions<CouchbaseCacheOptions> options);
public IBucket Bucket { get; }
public CouchbaseCacheOptions Options { get; }
}
通常,如果必须加载,我会使用类似 Bind()。To()。InSingletonScope();
但是对于上面的类,我将如何在加载时将存储桶信息和选项作为值提供给它呢?我无法解决这个问题。
此外,ICouchbaseCachebucketProvider是从INamedbucketProvider派生的接口,派生类看起来像
public interface INamedBucketProvider
{
string BucketName { get; }
IBucket GetBucket();
}
到目前为止,我已经能够像这样设置CouchbaseClientDefinition
Bind<ICouchbaseClientDefinition>().ToMethod(ctx =>
{
var options = new CouchbaseClientDefinition
{
Servers = new List<Uri>
{
new Uri("http://couchbase.com/")
}
};
return options;
}).InSingletonScope();
我需要给Uri加上沙发名称和存储桶名称,并且逻辑无处不在。任何知识共享将不胜感激。
答案 0 :(得分:0)
如果CouchbaseCache的构造函数的参数在整个应用程序生命周期中都是相同的,则可以使用与构造函数参数的绑定进行绑定,例如在您要加载的地方:>
var options = new CouchbaseClientDefinition
{
Servers = new List<Uri>
{
new Uri("http://couchbase.com/")
}
};
var couchbaseCacheBucketProvider= new CouchbaseCacheBucketProvider
{
...
};
Bind<ICouchbaseClientDefinition().To<CouchbaseCache >()
.WithConstructorArgument(couchbaseCacheBucketProvider, options);
,但是您必须提供couchbaseCacheBucketProvider。
如果参数不同但受到限制,例如,如果您有两个版本的参数,则可以像这样使用命名绑定
var options1 = new CouchbaseClientDefinition
{
...
};
var options2 = new CouchbaseClientDefinition
{
...
};
var couchbaseCacheBucketProvider1= new CouchbaseCacheBucketProvider
{
...
};
var couchbaseCacheBucketProvider2= new CouchbaseCacheBucketProvider
{
...
};
Bind < ICouchbaseClientDefinition().To<CouchbaseCache>().WithConstructorArgument(couchbaseCacheBucketProvider, options1).Named("FirstBinding");
Bind < ICouchbaseClientDefinition().To<CouchbaseCache>().WithConstructorArgument(couchbaseCacheBucketProvider, options2).Named("SecondBinding");
不过,另一种替代方法是使用FactoryPattern / Singleton创建您的CouchbaseCache对象。然后,您只需要注入创建的Factory类,就可以在需要时使用Factory类来获取所需的CouchbaseCache对象。