public void RegisterComponentFactory(Type componentType, object factory) { Precondition.ArgumentNotNull(componentType, nameof(componentType)); Precondition.ArgumentNotNull(factory, nameof(factory)); Precondition.ArgumentCompatibleType(componentType, typeof(IComponent), nameof(componentType)); _registeredComponentFactories.Add(componentType, factory); }
public void RegisterDefaultComponentType(Type propertyType, Type componentType) { Precondition.ArgumentNotNull(componentType, nameof(componentType)); Precondition.ArgumentNotNull(propertyType, nameof(propertyType)); Precondition.ArgumentCompatibleType(componentType, typeof(IComponent), nameof(componentType)); if (_defaultComponenTypeForPropertyTypes.ContainsKey(propertyType)) { _defaultComponenTypeForPropertyTypes.Remove(propertyType); } _defaultComponenTypeForPropertyTypes.Add(propertyType, componentType); }
public T CreateComponentFromComponentType <T>(Type componentType) where T : IComponent { Precondition.ArgumentNotNull(componentType, nameof(componentType)); Precondition.ArgumentCompatibleType(componentType, typeof(IComponent), nameof(componentType)); return((T)ComponentFactoryWrapper.From(_registeredComponentFactories[componentType]).Create()); }