IVGCVSW-2067 : dynamically create workload factories based on the backends in the network

Change-Id: Ide594db8c79ff67642721d8bad47624b88621fbd
diff --git a/src/backends/IBackendInternal.hpp b/src/backends/IBackendInternal.hpp
index a441abd..7e44dbd 100644
--- a/src/backends/IBackendInternal.hpp
+++ b/src/backends/IBackendInternal.hpp
@@ -5,19 +5,27 @@
 #pragma once
 
 #include <armnn/Types.hpp>
-#include <backends/WorkloadFactory.hpp>
 
 namespace armnn
 {
+class IWorkloadFactory;
 
 class IBackendInternal : public IBackend
 {
 protected:
+    // Creation must be done through a specific
+    // backend interface.
     IBackendInternal() = default;
-    ~IBackendInternal() override = default;
 
 public:
-    virtual std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const = 0;
+    // Allow backends created by the factory function
+    // to be destroyed through IBackendInternal.
+    ~IBackendInternal() override = default;
+
+    using IWorkloadFactoryPtr = std::unique_ptr<IWorkloadFactory>;
+    virtual IWorkloadFactoryPtr CreateWorkloadFactory() const = 0;
 };
 
+using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
+
 } // namespace armnn