introduce concept of opaque client base configuration
diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc
index 1343233..a83290a 100644
--- a/src/compiler/csharp_generator.cc
+++ b/src/compiler/csharp_generator.cc
@@ -363,11 +363,18 @@
              "name", GetClientClassName(service));
   out->Print("{\n");
   out->Print("}\n");
-  out->Print("///<summary>Parameterless constructor to allow creation"
+  out->Print("///<summary>Protected parameterless constructor to allow creation"
              " of test doubles.</summary>\n");
   out->Print("protected $name$() : base()\n",
              "name", GetClientClassName(service));
   out->Print("{\n");
+  out->Print("}\n");
+  out->Print("///<summary>Protected constructor to allow creation of configured"
+             " clients.</summary>\n");
+  out->Print("protected $name$(ClientBaseConfiguration configuration)"
+             " : base(configuration)\n",
+             "name", GetClientClassName(service));
+  out->Print("{\n");
   out->Print("}\n\n");
 
   for (int i = 0; i < service->method_count(); i++) {
@@ -452,11 +459,11 @@
   }
 
   // override NewInstance method
-  out->Print("protected override $name$ NewInstance(CallInvoker callInvoker)\n",
+  out->Print("protected override $name$ NewInstance(ClientBaseConfiguration configuration)\n",
              "name", GetClientClassName(service));
   out->Print("{\n");
   out->Indent();
-  out->Print("return new $name$(callInvoker);\n",
+  out->Print("return new $name$(configuration);\n",
              "name", GetClientClassName(service));
   out->Outdent();
   out->Print("}\n");