protected virtual void Construct(TKey key, out TConcreteFlyweight flyweight) { Contract.Requires <ArgumentNullException>(key != null, "Argument key cannot be null"); Contract.Ensures(flyweight != null); var args = new object[1]; args[0] = key; flyweight = CreateHelper <TConcreteFlyweight> .CreateFromPrivateConstructor(args); }