public function wrap($value = null)
{
$wrappedObject = new WrappedObject($value, $this->presenter);
$caller = $this->createCaller($wrappedObject);
$arrayAccess = new SubjectWithArrayAccess($caller, $this->presenter, $this->dispatcher);
$expectationFactory = new ExpectationFactory($this->example, $this->dispatcher, $this->matchers);
return new Subject($value, $this, $wrappedObject, $caller, $arrayAccess, $expectationFactory);
}