是的。唯一的问题:ProxyGenerator 无论如何都需要实例化该类型的对象。此代码实际上在我的项目中正常工作:
public static class MongoExtensions
{
static readonly ProxyGenerator pg = new ProxyGenerator();
public static MongoCollection GetRetryCollection(this MongoDatabase db, string collectionName, int retryCount = 5, int pauseBetweenRetries = 2000)
{
var coll = db.GetCollection(collectionName);
return (MongoCollection)pg.CreateClassProxyWithTarget(typeof(MongoCollection), coll, new object[] { db, collectionName, coll.Settings }, new RetryingInterceptor { RetryCount = retryCount, PauseBetweenCalls = pauseBetweenRetries });
}
}
CreateClassProxyWithTarget 的参数是:
- 代理对象的类型,
- 代理实例
- 代理类型的构造函数参数数组。
- 此代理的拦截器。
我无法真正解释为什么它需要对象的构造函数参数,但是这段代码对我来说可以正常工作。