Skip to content

Commit

Permalink
Remove UnityFactory from DataObjectEdmModel
Browse files Browse the repository at this point in the history
  • Loading branch information
turbcool committed Apr 28, 2023
1 parent c1f06c8 commit b9f585f
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ public static class HttpConfigurationExtensions

// Model.
DataObjectEdmModel model = builder.Build();
config.DependencyResolver.GetService(typeof(DataObjectEdmModel));

This comment has been minimized.

Copy link
@Anisimova2020

Anisimova2020 May 19, 2023

Contributor

Для чего это изменение?

This comment has been minimized.

Copy link
@turbcool

turbcool May 19, 2023

Author Contributor

Нужно убрать. Тестировал, забыл убрать.


// DataService for batch requests support.
IDataService dataService = (IDataService)config.DependencyResolver.GetService(typeof(IDataService));
Expand Down
51 changes: 12 additions & 39 deletions NewPlatform.Flexberry.ORM.ODataService/Model/DataObjectEdmModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,38 +92,11 @@ public class DataObjectEdmModel : EdmModel
public DataObjectEdmModel(DataObjectEdmMetadata metadata, IDataObjectEdmModelBuilder edmModelBuilder = null)
{
EdmModelBuilder = edmModelBuilder;
var container = UnityFactory.GetContainer();
if (container != null)
if (serviceProvider != null)
{
if (container.IsRegistered<IExportService>("Export"))
{
ExportService = container.Resolve<IExportService>("Export");
}

if (container.IsRegistered<IExportService>())
{
ExportService = container.Resolve<IExportService>();
}

if (container.IsRegistered<IExportStringedObjectViewService>("ExportStringedObjectView"))
{
ExportStringedObjectViewService = container.Resolve<IExportStringedObjectViewService>("ExportStringedObjectView");
}

if (container.IsRegistered<IExportStringedObjectViewService>())
{
ExportStringedObjectViewService = container.Resolve<IExportStringedObjectViewService>();
}

if (container.IsRegistered<IODataExportService>("Export"))
{
ODataExportService = container.Resolve<IODataExportService>("Export");
}

if (container.IsRegistered<IODataExportService>())
{
ODataExportService = container.Resolve<IODataExportService>();
}
ExportService = serviceProvider.GetService<IExportService>();

This comment has been minimized.

Copy link
@Anisimova2020

Anisimova2020 May 19, 2023

Contributor

Код вроде не эквивалентен. В оригинале в том числе именованные разрешения присутствуют.

This comment has been minimized.

Copy link
@turbcool

turbcool May 19, 2023

Author Contributor

Для именованных разрешений придётся использовать UnityContainer. IServiceProvider не умеет из коробки делать именнованные разрешения.

ExportStringedObjectViewService = serviceProvider.GetService<IExportStringedObjectViewService>();
ODataExportService = serviceProvider.GetService<IODataExportService>();
}

_metadata = metadata ?? throw new ArgumentNullException(nameof(metadata), "Contract assertion not met: metadata != null");
Expand Down Expand Up @@ -741,14 +714,14 @@ private string GetEntityTypeNamespace(Type type)
{
var name = type.Namespace;
if (type != typeof(DataObject) && EdmModelBuilder != null && EdmModelBuilder.EntityTypeNamespaceBuilder != null)
name = EdmModelBuilder.EntityTypeNamespaceBuilder(type);

// There are extra checks on MS libraries that lead to exceptions if name is empty or null.
if (name == string.Empty)
{
return "____";
}

name = EdmModelBuilder.EntityTypeNamespaceBuilder(type);

// There are extra checks on MS libraries that lead to exceptions if name is empty or null.
if (name == string.Empty)
{
return "____";
}

return name;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ public class DefaultDataObjectEdmModelBuilder : IDataObjectEdmModelBuilder
/// </summary>
private readonly PseudoDetailDefinitions _pseudoDetailDefinitions;

/// <summary>
/// Service provider for resolving DataObjectEdmModel.
/// </summary>
private readonly IServiceProvider _serviceProvider;

/// <summary>
/// Additional mapping of CLR type to edm primitive type. When it's required on the application side.
/// </summary>
Expand Down Expand Up @@ -75,16 +80,19 @@ public class DefaultDataObjectEdmModelBuilder : IDataObjectEdmModelBuilder
/// Initializes a new instance of the <see cref="DefaultDataObjectEdmModelBuilder"/> class.
/// </summary>
/// <param name="searchAssemblies">The list of assemblies for searching types to expose.</param>
/// <param name="serviceProvider">Service provider for resolving DataObjectEdmModel.</param>
/// <param name="useNamespaceInEntitySetName">Is need to add the whole type namespace for EDM entity set.</param>
/// <param name="pseudoDetailDefinitions">A collection of pseudodetail links.</param>
/// <param name="additionalMapping">Additional mapping of CLR type to edm primitive type.</param>
public DefaultDataObjectEdmModelBuilder(
IEnumerable<Assembly> searchAssemblies,
IServiceProvider serviceProvider = null,
bool useNamespaceInEntitySetName = true,
PseudoDetailDefinitions pseudoDetailDefinitions = null,
Dictionary<Type, IEdmPrimitiveType> additionalMapping = null)
{
_searchAssemblies = searchAssemblies ?? throw new ArgumentNullException(nameof(searchAssemblies), "Contract assertion not met: searchAssemblies != null");
_serviceProvider = serviceProvider;
_useNamespaceInEntitySetName = useNamespaceInEntitySetName;
_pseudoDetailDefinitions = pseudoDetailDefinitions ?? new PseudoDetailDefinitions();

Expand Down Expand Up @@ -143,7 +151,7 @@ public DataObjectEdmModel Build()
}
}

return new DataObjectEdmModel(meta, this);
return new DataObjectEdmModel(meta, _serviceProvider, this);
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public BaseODataServiceIntegratedTest(CustomWebApplicationFactory<Startup> facto
};
UseNamespaceInEntitySetName = useNamespaceInEntitySetName;

_builder = new DefaultDataObjectEdmModelBuilder(DataObjectsAssembliesNames, UseNamespaceInEntitySetName, pseudoDetailDefinitions);
_builder = new DefaultDataObjectEdmModelBuilder(DataObjectsAssembliesNames, null, UseNamespaceInEntitySetName, pseudoDetailDefinitions);
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public virtual void Configure(IApplicationBuilder app, IHostingEnvironment env)
typeof(UserSetting).Assembly,
typeof(Lock).Assembly,
};
var modelBuilder = new DefaultDataObjectEdmModelBuilder(assemblies, false);
var modelBuilder = new DefaultDataObjectEdmModelBuilder(assemblies, builder.ServiceProvider, false);
var token = builder.MapDataObjectRoute(modelBuilder);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public override void Configure(IApplicationBuilder app, IHostingEnvironment env)
};
PseudoDetailDefinitions pseudoDetailDefinitions = (PseudoDetailDefinitions)container.Resolve(typeof(PseudoDetailDefinitions));
var modelBuilder = new DefaultDataObjectEdmModelBuilder(assemblies, false, pseudoDetailDefinitions);
var modelBuilder = new DefaultDataObjectEdmModelBuilder(assemblies, builder.ServiceProvider, false, pseudoDetailDefinitions);
var token = builder.MapDataObjectRoute(modelBuilder);
Expand Down

0 comments on commit b9f585f

Please sign in to comment.