diff --git a/src/Caliburn.Micro.Core/IoC.cs b/src/Caliburn.Micro.Core/IoC.cs
index a060db170..229dba15f 100644
--- a/src/Caliburn.Micro.Core/IoC.cs
+++ b/src/Caliburn.Micro.Core/IoC.cs
@@ -7,8 +7,14 @@ namespace Caliburn.Micro
///
/// Used by the framework to pull instances from an IoC container and to inject dependencies into certain existing classes.
///
- public static class IoC
- {
+ public static class IoC {
+ static IoC() {
+ if (Execute.InDesignMode) {
+ GetInstance = (service, key) => Activator.CreateInstance(service);
+ GetAllInstances = service => new[] { Activator.CreateInstance(service) };
+ BuildUp = o => { };
+ }
+ }
///
/// Gets an instance by type and key.
///
diff --git a/src/Caliburn.Micro.Platform.Core/TypeMappingConfiguration.cs b/src/Caliburn.Micro.Platform.Core/TypeMappingConfiguration.cs
index 58589a56d..6888e3f0a 100644
--- a/src/Caliburn.Micro.Platform.Core/TypeMappingConfiguration.cs
+++ b/src/Caliburn.Micro.Platform.Core/TypeMappingConfiguration.cs
@@ -17,6 +17,11 @@ public class TypeMappingConfiguration
///
public string DefaultSubNamespaceForViewModels { get; set; } = "ViewModels";
+ ///
+ /// The default subnamespace for DesignViewModels. Used for creating default subnamespace mappings. Defaults to "DesignViewModels".
+ ///
+ public string DefaultSubNamespaceForDesignViewModels = "DesignViewModels";
+
///
/// Flag to indicate whether or not the name of the Type should be transformed when adding a type mapping. Defaults to true.
///
@@ -38,6 +43,12 @@ public class TypeMappingConfiguration
///
public List ViewSuffixList { get; set; } = new List(new[] { "View", "Page" });
+ ///
+ /// List of design ViewModels suffixes for which default type mappings should be created. Applies only when UseNameSuffixesInMappings = true.
+ /// Default values are "ViewModelDesign", "DesignViewModel"
+ ///
+ public List DesignViewModelSuffixList = new List(new[] { "ViewModelDesign", "DesignViewModel" });
+
///
/// The name suffix for ViewModels. Applies only when UseNameSuffixesInMappings = true. The default is "ViewModel".
///
diff --git a/src/Caliburn.Micro.Platform/ViewLocator.cs b/src/Caliburn.Micro.Platform/ViewLocator.cs
index c9ce35e6b..71bdfce64 100644
--- a/src/Caliburn.Micro.Platform/ViewLocator.cs
+++ b/src/Caliburn.Micro.Platform/ViewLocator.cs
@@ -35,6 +35,7 @@ public static class ViewLocator {
//These fields are used for configuring the default type mappings. They can be changed using ConfigureTypeMappings().
static string defaultSubNsViews;
static string defaultSubNsViewModels;
+ static string defaultSubNsDesignViewModels;
static bool useNameSuffixesInMappings;
static string nameFormat;
static string viewModelSuffix;
@@ -70,6 +71,11 @@ public static void ConfigureTypeMappings(TypeMappingConfiguration config) {
throw new ArgumentException("DefaultSubNamespaceForViewModels field cannot be blank.");
}
+ if (Execute.InDesignMode && String.IsNullOrEmpty(config.DefaultSubNamespaceForDesignViewModels))
+ {
+ throw new ArgumentException("DefaultSubNamespaceForDesignViewModels field cannot be blank.");
+ }
+
if (String.IsNullOrEmpty(config.NameFormat)) {
throw new ArgumentException("NameFormat field cannot be blank.");
}
@@ -79,6 +85,7 @@ public static void ConfigureTypeMappings(TypeMappingConfiguration config) {
defaultSubNsViews = config.DefaultSubNamespaceForViews;
defaultSubNsViewModels = config.DefaultSubNamespaceForViewModels;
+ if (Execute.InDesignMode) defaultSubNsDesignViewModels = config.DefaultSubNamespaceForDesignViewModels;
nameFormat = config.NameFormat;
useNameSuffixesInMappings = config.UseNameSuffixesInMappings;
viewModelSuffix = config.ViewModelSuffix;
@@ -86,6 +93,12 @@ public static void ConfigureTypeMappings(TypeMappingConfiguration config) {
includeViewSuffixInVmNames = config.IncludeViewSuffixInViewModelNames;
SetAllDefaults();
+
+ if (Execute.InDesignMode) {
+ foreach (var designSuffix in config.DesignViewModelSuffixList) {
+ NameTransformer.AddRule($"{designSuffix}$", config.ViewSuffixList);
+ }
+ }
}
@@ -96,6 +109,7 @@ private static void SetAllDefaults() {
}
else {
AddSubNamespaceMapping(defaultSubNsViewModels, defaultSubNsViews);
+ if (Execute.InDesignMode) AddSubNamespaceMapping(defaultSubNsDesignViewModels, defaultSubNsViews);
}
}
@@ -113,6 +127,9 @@ public static void AddDefaultTypeMapping(string viewSuffix = "View") {
//Check for .ViewModels.. construct
AddSubNamespaceMapping(defaultSubNsViewModels, defaultSubNsViews, viewSuffix);
+
+ //Check for .DesignViewModels.. construct
+ if (Execute.InDesignMode) AddSubNamespaceMapping(defaultSubNsDesignViewModels, defaultSubNsViews, viewSuffix);
}
///
diff --git a/src/Caliburn.Micro.Platform/ViewModelLocator.cs b/src/Caliburn.Micro.Platform/ViewModelLocator.cs
index aa697d674..617120fe9 100644
--- a/src/Caliburn.Micro.Platform/ViewModelLocator.cs
+++ b/src/Caliburn.Micro.Platform/ViewModelLocator.cs
@@ -35,6 +35,7 @@ public static class ViewModelLocator
//These fields are used for configuring the default type mappings. They can be changed using ConfigureTypeMappings().
static string defaultSubNsViews;
static string defaultSubNsViewModels;
+ static string defaultSubNsDesignViewModels;
static bool useNameSuffixesInMappings;
static string nameFormat;
static string viewModelSuffix;
@@ -85,6 +86,11 @@ public static void ConfigureTypeMappings(TypeMappingConfiguration config)
throw new ArgumentException("DefaultSubNamespaceForViewModels field cannot be blank.");
}
+ if (Execute.InDesignMode && String.IsNullOrEmpty(config.DefaultSubNamespaceForDesignViewModels))
+ {
+ throw new ArgumentException("DefaultSubNamespaceForDesignViewModels field cannot be blank.");
+ }
+
if (String.IsNullOrEmpty(config.NameFormat))
{
throw new ArgumentException("NameFormat field cannot be blank.");
@@ -95,6 +101,7 @@ public static void ConfigureTypeMappings(TypeMappingConfiguration config)
defaultSubNsViews = config.DefaultSubNamespaceForViews;
defaultSubNsViewModels = config.DefaultSubNamespaceForViewModels;
+ defaultSubNsDesignViewModels = config.DefaultSubNamespaceForDesignViewModels;
nameFormat = config.NameFormat;
useNameSuffixesInMappings = config.UseNameSuffixesInMappings;
viewModelSuffix = config.ViewModelSuffix;
@@ -114,6 +121,7 @@ private static void SetAllDefaults()
else
{
AddSubNamespaceMapping(defaultSubNsViews, defaultSubNsViewModels);
+ if (Execute.InDesignMode) AddSubNamespaceMapping(defaultSubNsDesignViewModels, defaultSubNsViews);
}
}
@@ -133,6 +141,10 @@ public static void AddDefaultTypeMapping(string viewSuffix = DefaultViewSuffix)
//Check for .Views.. construct
AddSubNamespaceMapping(defaultSubNsViews, defaultSubNsViewModels, viewSuffix);
+
+ //Check for .Views.. construct
+ if (Execute.InDesignMode) AddSubNamespaceMapping(defaultSubNsViews, defaultSubNsDesignViewModels, viewSuffix);
+
}
///