From f8739ad650f2366e14af152a38fdcd77a187014c Mon Sep 17 00:00:00 2001 From: Omar Piani Date: Fri, 31 May 2019 17:07:29 +0200 Subject: [PATCH 1/2] Samples for issue #235 --- .../Controllers/ContactsController.cs | 5 +- SharpRepository.Samples.CoreMvc/Startup.cs | 7 +++ .../UserService.cs | 52 +++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 SharpRepository.Samples.CoreMvc/UserService.cs diff --git a/SharpRepository.Samples.CoreMvc/Controllers/ContactsController.cs b/SharpRepository.Samples.CoreMvc/Controllers/ContactsController.cs index 3870294d..d4223ba1 100644 --- a/SharpRepository.Samples.CoreMvc/Controllers/ContactsController.cs +++ b/SharpRepository.Samples.CoreMvc/Controllers/ContactsController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc; using SharpRepository.Repository; using SharpRepository.CoreMvc.Models; +using SharpRepository.Samples.CoreMvc; namespace SharpRepository.CoreMvc.Controllers { @@ -13,9 +14,9 @@ public class ContactsController : Controller { protected IRepository repository; - public ContactsController(IRepository repository) + public ContactsController(IUserServiceCustom service) { - this.repository = repository; + this.repository = service.GetRepository(); } // GET: Contacts diff --git a/SharpRepository.Samples.CoreMvc/Startup.cs b/SharpRepository.Samples.CoreMvc/Startup.cs index e2c4da2d..c0200e01 100644 --- a/SharpRepository.Samples.CoreMvc/Startup.cs +++ b/SharpRepository.Samples.CoreMvc/Startup.cs @@ -9,6 +9,7 @@ using System; using MongoDB.Bson.Serialization; using SharpRepository.CoreMvc.Models; +using SharpRepository.Samples.CoreMvc; namespace SharpRepository.CoreMvc { @@ -32,6 +33,12 @@ public IServiceProvider ConfigureServices(IServiceCollection services) services.AddTransient(r => new EmailRepository(RepositoryFactory.BuildSharpRepositoryConfiguation(Configuration.GetSection("sharpRepository")), "efCore")); + services.AddTransient(); + services.AddTransient(); + services.AddTransient( + r => new UserRepository( + RepositoryFactory.BuildSharpRepositoryConfiguation(Configuration.GetSection("sharpRepository")), "efCore" + )); // return services.UseSharpRepository(Configuration.GetSection("sharpRepository")); //default InMemory // return services.UseSharpRepository(Configuration.GetSection("sharpRepository"), "mongoDb"); // for Mongo Db return services.UseSharpRepository(Configuration.GetSection("sharpRepository"), "efCore"); // for Ef Core diff --git a/SharpRepository.Samples.CoreMvc/UserService.cs b/SharpRepository.Samples.CoreMvc/UserService.cs new file mode 100644 index 00000000..25f583fa --- /dev/null +++ b/SharpRepository.Samples.CoreMvc/UserService.cs @@ -0,0 +1,52 @@ +using Microsoft.Extensions.Logging; +using SharpRepository.CoreMvc.Models; +using SharpRepository.Repository; +using SharpRepository.Repository.Configuration; + +namespace SharpRepository.Samples.CoreMvc +{ + public class UserRepository : ConfigurationBasedRepository + { + public UserRepository(ISharpRepositoryConfiguration configuration, string repositoryName = null) : base(configuration, repositoryName) { } + } + + public class UserService : IUserService + { + protected IRepository _userRepository; + + public UserService(IRepository userRepository) + { + _userRepository = userRepository; + } + + public IRepository GetRepository() + { + return _userRepository; + } + } + + public interface IUserService + { + IRepository GetRepository(); + } + + public class UserServiceCustom : IUserServiceCustom + { + public UserRepository _userRepository; + + public UserServiceCustom(UserRepository userRepository) + { + _userRepository = userRepository; + } + + public IRepository GetRepository() + { + return _userRepository; + } + } + + public interface IUserServiceCustom + { + IRepository GetRepository(); + } +} From 77c684de40fe432589c940ad042009bbd213f96c Mon Sep 17 00:00:00 2001 From: Omar Piani Date: Thu, 27 Jun 2019 12:40:16 +0200 Subject: [PATCH 2/2] Xml experience! --- .../Models/Contact.cs | 11 ++------ .../Models/Email.cs | 2 ++ .../SharpRepository.Samples.CoreMvc.csproj | 8 ++++-- SharpRepository.Samples.CoreMvc/Startup.cs | 7 ++--- .../appsettings.json | 28 ++++--------------- .../xmlDestinationDirectory/Contact.xml | 13 +++++++++ 6 files changed, 31 insertions(+), 38 deletions(-) create mode 100644 SharpRepository.Samples.CoreMvc/xmlDestinationDirectory/Contact.xml diff --git a/SharpRepository.Samples.CoreMvc/Models/Contact.cs b/SharpRepository.Samples.CoreMvc/Models/Contact.cs index 193670a7..d725bb5f 100644 --- a/SharpRepository.Samples.CoreMvc/Models/Contact.cs +++ b/SharpRepository.Samples.CoreMvc/Models/Contact.cs @@ -1,26 +1,21 @@ -using MongoDB.Bson; -using MongoDB.Bson.Serialization.Attributes; -using SharpRepository.MongoDbRepository; -using SharpRepository.Repository; +using SharpRepository.Repository; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; +using System.Xml.Serialization; namespace SharpRepository.CoreMvc.Models { - [MongoDbCollectionName("Contacts")] public class Contact { - [BsonId] // Needed for MongoDB - [BsonRepresentation(BsonType.ObjectId)] // Needed for MongoDB [RepositoryPrimaryKey] //Autogenrates value for strings [Key] //Ef primary key public string Id { get; set; } public string Name { get; set; } [UIHint("_Emails")] - public virtual ICollection Emails { get; set; } + public virtual List Emails { get; set; } } } diff --git a/SharpRepository.Samples.CoreMvc/Models/Email.cs b/SharpRepository.Samples.CoreMvc/Models/Email.cs index e7bb063f..e7610f4b 100644 --- a/SharpRepository.Samples.CoreMvc/Models/Email.cs +++ b/SharpRepository.Samples.CoreMvc/Models/Email.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations.Schema; +using System.Xml.Serialization; namespace SharpRepository.CoreMvc.Models { @@ -6,6 +7,7 @@ public class Email { public int Id { get; set; } public string EmailAddress { get; set; } + [XmlIgnore] public Contact Contact; } } \ No newline at end of file diff --git a/SharpRepository.Samples.CoreMvc/SharpRepository.Samples.CoreMvc.csproj b/SharpRepository.Samples.CoreMvc/SharpRepository.Samples.CoreMvc.csproj index cafefc3e..4e1b70d0 100644 --- a/SharpRepository.Samples.CoreMvc/SharpRepository.Samples.CoreMvc.csproj +++ b/SharpRepository.Samples.CoreMvc/SharpRepository.Samples.CoreMvc.csproj @@ -14,10 +14,12 @@ - - - + + + + + diff --git a/SharpRepository.Samples.CoreMvc/Startup.cs b/SharpRepository.Samples.CoreMvc/Startup.cs index c0200e01..62845db0 100644 --- a/SharpRepository.Samples.CoreMvc/Startup.cs +++ b/SharpRepository.Samples.CoreMvc/Startup.cs @@ -7,7 +7,6 @@ using SharpRepository.Repository; using SharpRepository.Samples.CoreMvc.CustomRepositories; using System; -using MongoDB.Bson.Serialization; using SharpRepository.CoreMvc.Models; using SharpRepository.Samples.CoreMvc; @@ -31,17 +30,17 @@ public IServiceProvider ConfigureServices(IServiceCollection services) // services.AddTransient(); // needed if you don't write dbContextClass on json configuration - services.AddTransient(r => new EmailRepository(RepositoryFactory.BuildSharpRepositoryConfiguation(Configuration.GetSection("sharpRepository")), "efCore")); + services.AddTransient(r => new EmailRepository(RepositoryFactory.BuildSharpRepositoryConfiguation(Configuration.GetSection("sharpRepository")), "xml")); services.AddTransient(); services.AddTransient(); services.AddTransient( r => new UserRepository( - RepositoryFactory.BuildSharpRepositoryConfiguation(Configuration.GetSection("sharpRepository")), "efCore" + RepositoryFactory.BuildSharpRepositoryConfiguation(Configuration.GetSection("sharpRepository")), "xml" )); // return services.UseSharpRepository(Configuration.GetSection("sharpRepository")); //default InMemory // return services.UseSharpRepository(Configuration.GetSection("sharpRepository"), "mongoDb"); // for Mongo Db - return services.UseSharpRepository(Configuration.GetSection("sharpRepository"), "efCore"); // for Ef Core + return services.UseSharpRepository(Configuration.GetSection("sharpRepository"), "xml"); // for Ef Core } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/SharpRepository.Samples.CoreMvc/appsettings.json b/SharpRepository.Samples.CoreMvc/appsettings.json index 3704b004..7be9e1bd 100644 --- a/SharpRepository.Samples.CoreMvc/appsettings.json +++ b/SharpRepository.Samples.CoreMvc/appsettings.json @@ -10,29 +10,11 @@ }, "sharpRepository": { "repositories": { - "default": "inMemory", - "inMemory": { - "factory": "SharpRepository.InMemoryRepository.InMemoryConfigRepositoryFactory, SharpRepository.InMemoryRepository" - }, - "inMemoryNoCaching": { - "factory": "SharpRepository.InMemoryRepository.InMemoryConfigRepositoryFactory, SharpRepository.InMemoryRepository", - "cachingStrategy": "none", - "cachingProvider": "noCachingProvider" - }, - "mongoDb": { - "factory": "SharpRepository.MongoDbRepository.MongoDbConfigRepositoryFactory, SharpRepository.MongoDbRepository", - "cachingStrategy": "none", - "cachingProvider": "noCachingProvider", - "connectionString": "mongodb://127.0.0.1/SharpRepositoryCoreContacts", - "sslEnabled": false, - "sslProtocol": "Tls12" - }, - "efCore": { - "factory": "SharpRepository.EfCoreRepository.EfCoreConfigRepositoryFactory, SharpRepository.EfCoreRepository", - "dbContextType": "SharpRepository.CoreMvc.ContactContext, SharpRepository.Samples.CoreMvc", - "cachingStrategy": "none", - "cachingProvider": "noCachingProvider" - } + "default": "xml", + "xml": { + "factory": "SharpRepository.XmlRepository.XmlConfigRepositoryFactory, SharpRepository.XmlRepository", + "directory": "xmlDestinationDirectory" + } }, "cachingProviders": { "default": "inMemoryProvider", diff --git a/SharpRepository.Samples.CoreMvc/xmlDestinationDirectory/Contact.xml b/SharpRepository.Samples.CoreMvc/xmlDestinationDirectory/Contact.xml new file mode 100644 index 00000000..ddf5d7b0 --- /dev/null +++ b/SharpRepository.Samples.CoreMvc/xmlDestinationDirectory/Contact.xml @@ -0,0 +1,13 @@ + + + + e7f2b7b6a3ee4488aec5d99444ea2a41 + piero + + + 0 + asd + + + + \ No newline at end of file