├── EnterpriseApplication ├── Services │ ├── Global.asax │ ├── InvoiceService.svc │ ├── IInvoiceService.cs │ ├── packages.config │ ├── InvoiceService.svc.cs │ ├── Web.config │ ├── Global.asax.cs │ ├── Web.Debug.config │ ├── Web.Release.config │ ├── Properties │ │ └── AssemblyInfo.cs │ └── Services.csproj ├── .nuget │ ├── NuGet.exe │ ├── NuGet.Config │ └── NuGet.targets ├── Persistence │ ├── packages.config │ ├── MongoRepository.cs │ ├── InvoiceRepository.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── Persistence.csproj ├── Domain │ ├── Invoice │ │ ├── IInvoice.cs │ │ ├── IInvoiceRepository.cs │ │ ├── InvoiceFactory.cs │ │ └── Invoice.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── Domain.csproj ├── Business │ ├── Commands │ │ └── ChangeInvoiceDuedate │ │ │ ├── ChangeInvoiceDuedateRequest.cs │ │ │ ├── InvoiceDueDateChangeValidator.cs │ │ │ ├── InvalidDueDateException.cs │ │ │ └── ChangeInvoiceDuedateCommand.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── Business.csproj ├── CrossCuttingConcerns │ ├── DependencyInjection │ │ ├── Installers │ │ │ ├── CrossCuttingConcerns.cs │ │ │ ├── Domain.cs │ │ │ ├── Business.cs │ │ │ └── Persistence.cs │ │ └── CompositionRoot.cs │ ├── packages.config │ ├── Logging │ │ └── ExceptionLogger.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── CrossCuttingConcerns.csproj └── EnterpriseApplication.sln ├── README.md ├── .gitattributes ├── .gitignore └── LICENSE /EnterpriseApplication/Services/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="Services.Global" Language="C#" %> 2 | -------------------------------------------------------------------------------- /EnterpriseApplication/.nuget/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taimila/EnterpriseApplicationExample/HEAD/EnterpriseApplication/.nuget/NuGet.exe -------------------------------------------------------------------------------- /EnterpriseApplication/Persistence/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /EnterpriseApplication/.nuget/NuGet.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /EnterpriseApplication/Domain/Invoice/IInvoice.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace EnterpriseApplication.Invoice 4 | { 5 | public interface IInvoice 6 | { 7 | void ChangeDuedate(DateTime newDuedate); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/InvoiceService.svc: -------------------------------------------------------------------------------- 1 | <%@ ServiceHost Language="C#" Debug="true" Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" Service="Services.InvoiceService" CodeBehind="InvoiceService.svc.cs" %> 2 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/IInvoiceService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ServiceModel; 3 | 4 | namespace Services 5 | { 6 | [ServiceContract] 7 | public interface IInvoiceService 8 | { 9 | [OperationContract] 10 | void ChangeInvoiceDuedate(string invoiceNumber, DateTime newDuedate); 11 | } 12 | } -------------------------------------------------------------------------------- /EnterpriseApplication/Domain/Invoice/IInvoiceRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace EnterpriseApplication.Invoice 4 | { 5 | public interface IInvoiceRepository 6 | { 7 | IInvoice GetById(Guid id); 8 | IInvoice GetByNumber(string invoiceNumber); 9 | 10 | void Save(IInvoice invoice); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /EnterpriseApplication/Business/Commands/ChangeInvoiceDuedate/ChangeInvoiceDuedateRequest.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Business.Commands.ChangeInvoiceDuedate 4 | { 5 | public class ChangeInvoiceDuedateRequest 6 | { 7 | public string Number { get; set; } 8 | public DateTime NewDuedate { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | EnterpriseApplicationExample 2 | ============================ 3 | 4 | Example project to illustrate how one can organize the .NET Solution of an enterprise application. This repository is related to the blog post found [here](http://www.taimila.com/blog/.net-solution-structure-of-an-enterprise-application/) that explains the reasoning and architecture in more detail. 5 | -------------------------------------------------------------------------------- /EnterpriseApplication/Business/Commands/ChangeInvoiceDuedate/InvoiceDueDateChangeValidator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Business.Commands.ChangeInvoiceDuedate 4 | { 5 | public class InvoiceDueDateChangeValidator 6 | { 7 | public bool IsDuedateValid(DateTime duedate) 8 | { 9 | // Dummy validation for illustration purposes 10 | return duedate > DateTime.Today; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /EnterpriseApplication/Domain/Invoice/InvoiceFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace EnterpriseApplication.Invoice 4 | { 5 | public class InvoiceFactory 6 | { 7 | public virtual IInvoice Create(string number, DateTime duedate) 8 | { 9 | return new Invoice 10 | { 11 | Id = Guid.NewGuid(), 12 | Number = number, 13 | Duedate = duedate 14 | }; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /EnterpriseApplication/Domain/Invoice/Invoice.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace EnterpriseApplication.Invoice 4 | { 5 | public class Invoice : IInvoice 6 | { 7 | public Guid Id { get; set; } 8 | public string Number { get; set; } 9 | public DateTime Duedate { get; set; } 10 | 11 | public void ChangeDuedate(DateTime newDuedate) 12 | { 13 | // There is more complex logic, but thats not the 14 | // point of this blog post and therefore skipped. 15 | Duedate = newDuedate; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/DependencyInjection/Installers/CrossCuttingConcerns.cs: -------------------------------------------------------------------------------- 1 | using Castle.MicroKernel.Registration; 2 | using Castle.MicroKernel.SubSystems.Configuration; 3 | using Castle.Windsor; 4 | using CrossCuttingConcerns.Logging; 5 | 6 | namespace CrossCuttingConcerns.DependencyInjection 7 | { 8 | public class CrossCuttingConcerns : IWindsorInstaller 9 | { 10 | public void Install(IWindsorContainer container, IConfigurationStore store) 11 | { 12 | container.Register(Component.For()); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /EnterpriseApplication/Persistence/MongoRepository.cs: -------------------------------------------------------------------------------- 1 | using MongoDB.Driver; 2 | 3 | namespace Persistence 4 | { 5 | public class MongoRepository 6 | { 7 | readonly MongoClient mongo; 8 | 9 | public MongoRepository(MongoClient mongo) 10 | { 11 | this.mongo = mongo; 12 | } 13 | 14 | protected MongoDatabase Database 15 | { 16 | get 17 | { 18 | var server = mongo.GetServer(); 19 | return server.GetDatabase("EnterpriseApplication"); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/DependencyInjection/CompositionRoot.cs: -------------------------------------------------------------------------------- 1 | using Castle.Facilities.Logging; 2 | using Castle.Windsor; 3 | 4 | namespace CrossCuttingConcerns.DependencyInjection 5 | { 6 | public class CompositionRoot 7 | { 8 | public virtual void ComposeApplication(IWindsorContainer container) 9 | { 10 | container.AddFacility(f => f.UseLog4Net()); 11 | 12 | container.Install( 13 | new CrossCuttingConcerns(), 14 | new Persistence(), 15 | new Domain(), 16 | new Business() 17 | ); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /EnterpriseApplication/Business/Commands/ChangeInvoiceDuedate/InvalidDueDateException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Business.Commands.ChangeInvoiceDuedate 4 | { 5 | [Serializable] 6 | public class InvalidDueDateException : Exception 7 | { 8 | public InvalidDueDateException() { } 9 | public InvalidDueDateException(string message) : base(message) { } 10 | public InvalidDueDateException(string message, Exception inner) : base(message, inner) { } 11 | protected InvalidDueDateException( 12 | System.Runtime.Serialization.SerializationInfo info, 13 | System.Runtime.Serialization.StreamingContext context) 14 | : base(info, context) { } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/DependencyInjection/Installers/Domain.cs: -------------------------------------------------------------------------------- 1 | using Castle.MicroKernel.Registration; 2 | using Castle.MicroKernel.SubSystems.Configuration; 3 | using Castle.Windsor; 4 | using EnterpriseApplication.Invoice; 5 | 6 | namespace CrossCuttingConcerns.DependencyInjection 7 | { 8 | public class Domain : IWindsorInstaller 9 | { 10 | public void Install(IWindsorContainer container, IConfigurationStore store) 11 | { 12 | container.Register(Classes.FromAssemblyContaining() 13 | .Where(type => type.Name.EndsWith("Factory")) 14 | .WithServiceSelf() 15 | .LifestyleSingleton()); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/InvoiceService.svc.cs: -------------------------------------------------------------------------------- 1 | using Business.Commands.ChangeInvoiceDuedate; 2 | using System; 3 | 4 | namespace Services 5 | { 6 | public class InvoiceService : IInvoiceService 7 | { 8 | ChangeInvoiceDuedateCommand changeInvoiceDuedate; 9 | 10 | public InvoiceService(ChangeInvoiceDuedateCommand changeInvoiceDuedate) 11 | { 12 | this.changeInvoiceDuedate = changeInvoiceDuedate; 13 | } 14 | 15 | public void ChangeInvoiceDuedate(string invoiceNumber, DateTime newDuedate) 16 | { 17 | var request = new ChangeInvoiceDuedateRequest 18 | { 19 | Number = invoiceNumber, 20 | NewDuedate = newDuedate 21 | }; 22 | 23 | changeInvoiceDuedate.Execute(request); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/Web.config: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/Logging/ExceptionLogger.cs: -------------------------------------------------------------------------------- 1 | using Castle.Core.Logging; 2 | using Castle.DynamicProxy; 3 | using System; 4 | 5 | namespace CrossCuttingConcerns.Logging 6 | { 7 | public class ExceptionLogger : IInterceptor 8 | { 9 | ILogger log; 10 | 11 | public ExceptionLogger(ILogger log) 12 | { 13 | this.log = log; 14 | } 15 | 16 | public void Intercept(IInvocation invocation) 17 | { 18 | try 19 | { 20 | invocation.Proceed(); 21 | } 22 | catch (Exception e) 23 | { 24 | var message = string.Format("Method '{0}' of class '{1}' failed.", 25 | invocation.Method.Name, invocation.TargetType.Name); 26 | log.Error(message, e); 27 | throw; 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /EnterpriseApplication/Persistence/InvoiceRepository.cs: -------------------------------------------------------------------------------- 1 | using EnterpriseApplication.Invoice; 2 | using MongoDB.Driver; 3 | using MongoDB.Driver.Linq; 4 | using System; 5 | using System.Linq; 6 | 7 | namespace Persistence 8 | { 9 | public class InvoiceRepository : MongoRepository, IInvoiceRepository 10 | { 11 | public InvoiceRepository(MongoClient mongo) : base(mongo) { } 12 | 13 | public IInvoice GetById(Guid id) 14 | { 15 | return Invoices.AsQueryable() 16 | .Single(c => c.Id == id); 17 | } 18 | 19 | public IInvoice GetByNumber(string invoiceNumber) 20 | { 21 | return Invoices.AsQueryable() 22 | .Single(c => c.Number == invoiceNumber); 23 | } 24 | 25 | public void Save(IInvoice invoice) 26 | { 27 | Invoices.Save(invoice); 28 | } 29 | 30 | MongoCollection Invoices 31 | { 32 | get { return Database.GetCollection("invoices"); } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /EnterpriseApplication/Business/Commands/ChangeInvoiceDuedate/ChangeInvoiceDuedateCommand.cs: -------------------------------------------------------------------------------- 1 | using EnterpriseApplication.Invoice; 2 | 3 | namespace Business.Commands.ChangeInvoiceDuedate 4 | { 5 | public class ChangeInvoiceDuedateCommand 6 | { 7 | IInvoiceRepository invoiceRepository; 8 | InvoiceDueDateChangeValidator validator; 9 | 10 | public ChangeInvoiceDuedateCommand(IInvoiceRepository invoiceRepository) 11 | { 12 | this.invoiceRepository = invoiceRepository; 13 | this.validator = new InvoiceDueDateChangeValidator(); 14 | } 15 | 16 | public void Execute(ChangeInvoiceDuedateRequest request) 17 | { 18 | if(validator.IsDuedateValid(request.NewDuedate)) 19 | { 20 | IInvoice invoice = invoiceRepository.GetByNumber(request.Number); 21 | invoice.ChangeDuedate(request.NewDuedate); 22 | invoiceRepository.Save(invoice); 23 | } 24 | else 25 | { 26 | throw new InvalidDueDateException(); 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using Castle.Facilities.WcfIntegration; 2 | using Castle.MicroKernel.Registration; 3 | using Castle.Windsor; 4 | using CrossCuttingConcerns.DependencyInjection; 5 | using System; 6 | 7 | namespace Services 8 | { 9 | public class Global : System.Web.HttpApplication 10 | { 11 | WindsorContainer container; 12 | 13 | protected void Application_Start(object sender, EventArgs e) 14 | { 15 | container = new WindsorContainer(); 16 | container.AddFacility(); 17 | 18 | container.Register(Classes.FromThisAssembly() 19 | .Where(type => type.Name.EndsWith("Service")) 20 | .WithServiceDefaultInterfaces() 21 | .Configure(component => component.Named(component.Implementation.FullName))); 22 | 23 | new CompositionRoot().ComposeApplication(container); 24 | } 25 | 26 | protected void Application_End(object sender, EventArgs e) 27 | { 28 | if (container != null) 29 | container.Dispose(); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/DependencyInjection/Installers/Business.cs: -------------------------------------------------------------------------------- 1 | using Business.Commands.ChangeInvoiceDuedate; 2 | using Castle.MicroKernel.Registration; 3 | using Castle.MicroKernel.SubSystems.Configuration; 4 | using Castle.Windsor; 5 | using CrossCuttingConcerns.Logging; 6 | 7 | namespace CrossCuttingConcerns.DependencyInjection 8 | { 9 | public class Business : IWindsorInstaller 10 | { 11 | public void Install(IWindsorContainer container, IConfigurationStore store) 12 | { 13 | 14 | container.Register(Classes.FromAssemblyContaining() 15 | .Where(type => type.Name.EndsWith("Query")) 16 | .WithServiceSelf() 17 | .Configure(c => c.LifestyleSingleton().Interceptors())); 18 | 19 | container.Register(Classes.FromAssemblyContaining() 20 | .Where(type => type.Name.EndsWith("Command")) 21 | .WithServiceSelf() 22 | .Configure(c => c.LifestyleSingleton().Interceptors())); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/DependencyInjection/Installers/Persistence.cs: -------------------------------------------------------------------------------- 1 | using Castle.MicroKernel.Registration; 2 | using Castle.MicroKernel.SubSystems.Configuration; 3 | using Castle.Windsor; 4 | using MongoDB.Driver; 5 | using Persistence; 6 | 7 | namespace CrossCuttingConcerns.DependencyInjection 8 | { 9 | public class Persistence : IWindsorInstaller 10 | { 11 | public void Install(IWindsorContainer container, IConfigurationStore store) 12 | { 13 | RegiterMongoDb(container); 14 | RegisterRepositories(container); 15 | } 16 | 17 | protected virtual void RegiterMongoDb(IWindsorContainer container) 18 | { 19 | var mongoClient = new MongoClient("mongodb://localhost"); 20 | container.Register(Component.For().Instance(mongoClient)); 21 | } 22 | 23 | void RegisterRepositories(IWindsorContainer container) 24 | { 25 | container.Register(Classes.FromAssemblyContaining() 26 | .BasedOn() 27 | .WithServiceFirstInterface() 28 | .LifestyleSingleton()); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/Web.Debug.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/Web.Release.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Services")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Services")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("8a64aace-940b-458b-bc32-9fa243d7694d")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /EnterpriseApplication/Domain/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Domain")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Domain")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("744edf2d-aa43-4d2c-b895-6e928a96a202")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /EnterpriseApplication/Business/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Business")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Business")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("7057cbdf-79fb-4766-ae10-f603a5345970")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /EnterpriseApplication/Persistence/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Persistence")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Persistence")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("4bfca3e1-e333-4852-a7e4-1efbc4eee72c")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("CrossCuttingConcerns")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("CrossCuttingConcerns")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("3de80950-9e20-4dfb-8266-a5b9384ba683")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /EnterpriseApplication/Domain/Domain.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5476F7EE-8024-4F70-B257-A25FA3090E29} 8 | Library 9 | Properties 10 | Domain 11 | Domain 12 | v4.5 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 51 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /EnterpriseApplication/Business/Business.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5657ED47-B3B1-4C06-9D22-05999814F364} 8 | Library 9 | Properties 10 | Business 11 | Business 12 | v4.5 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | {5476f7ee-8024-4f70-b257-a25fa3090e29} 49 | Domain 50 | 51 | 52 | 53 | 60 | -------------------------------------------------------------------------------- /EnterpriseApplication/EnterpriseApplication.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.31101.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Domain", "Domain\Domain.csproj", "{5476F7EE-8024-4F70-B257-A25FA3090E29}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Business", "Business\Business.csproj", "{5657ED47-B3B1-4C06-9D22-05999814F364}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Persistence", "Persistence\Persistence.csproj", "{149C4677-8806-430E-B5F1-F75C4A26DC73}" 11 | EndProject 12 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{C942484B-1006-4054-89C2-1DC428E1F06D}" 13 | ProjectSection(SolutionItems) = preProject 14 | .nuget\NuGet.Config = .nuget\NuGet.Config 15 | .nuget\NuGet.exe = .nuget\NuGet.exe 16 | .nuget\NuGet.targets = .nuget\NuGet.targets 17 | EndProjectSection 18 | EndProject 19 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrossCuttingConcerns", "CrossCuttingConcerns\CrossCuttingConcerns.csproj", "{78A4B427-9F7C-42DA-8816-FEEBDD3646FA}" 20 | EndProject 21 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services", "Services\Services.csproj", "{5B4F7D72-CFEA-447E-91E6-35E12BDD5D91}" 22 | EndProject 23 | Global 24 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 25 | Debug|Any CPU = Debug|Any CPU 26 | Release|Any CPU = Release|Any CPU 27 | EndGlobalSection 28 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 29 | {5476F7EE-8024-4F70-B257-A25FA3090E29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 30 | {5476F7EE-8024-4F70-B257-A25FA3090E29}.Debug|Any CPU.Build.0 = Debug|Any CPU 31 | {5476F7EE-8024-4F70-B257-A25FA3090E29}.Release|Any CPU.ActiveCfg = Release|Any CPU 32 | {5476F7EE-8024-4F70-B257-A25FA3090E29}.Release|Any CPU.Build.0 = Release|Any CPU 33 | {5657ED47-B3B1-4C06-9D22-05999814F364}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 34 | {5657ED47-B3B1-4C06-9D22-05999814F364}.Debug|Any CPU.Build.0 = Debug|Any CPU 35 | {5657ED47-B3B1-4C06-9D22-05999814F364}.Release|Any CPU.ActiveCfg = Release|Any CPU 36 | {5657ED47-B3B1-4C06-9D22-05999814F364}.Release|Any CPU.Build.0 = Release|Any CPU 37 | {149C4677-8806-430E-B5F1-F75C4A26DC73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 38 | {149C4677-8806-430E-B5F1-F75C4A26DC73}.Debug|Any CPU.Build.0 = Debug|Any CPU 39 | {149C4677-8806-430E-B5F1-F75C4A26DC73}.Release|Any CPU.ActiveCfg = Release|Any CPU 40 | {149C4677-8806-430E-B5F1-F75C4A26DC73}.Release|Any CPU.Build.0 = Release|Any CPU 41 | {78A4B427-9F7C-42DA-8816-FEEBDD3646FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 42 | {78A4B427-9F7C-42DA-8816-FEEBDD3646FA}.Debug|Any CPU.Build.0 = Debug|Any CPU 43 | {78A4B427-9F7C-42DA-8816-FEEBDD3646FA}.Release|Any CPU.ActiveCfg = Release|Any CPU 44 | {78A4B427-9F7C-42DA-8816-FEEBDD3646FA}.Release|Any CPU.Build.0 = Release|Any CPU 45 | {5B4F7D72-CFEA-447E-91E6-35E12BDD5D91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 46 | {5B4F7D72-CFEA-447E-91E6-35E12BDD5D91}.Debug|Any CPU.Build.0 = Debug|Any CPU 47 | {5B4F7D72-CFEA-447E-91E6-35E12BDD5D91}.Release|Any CPU.ActiveCfg = Release|Any CPU 48 | {5B4F7D72-CFEA-447E-91E6-35E12BDD5D91}.Release|Any CPU.Build.0 = Release|Any CPU 49 | EndGlobalSection 50 | GlobalSection(SolutionProperties) = preSolution 51 | HideSolutionNode = FALSE 52 | EndGlobalSection 53 | EndGlobal 54 | -------------------------------------------------------------------------------- /EnterpriseApplication/Persistence/Persistence.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {149C4677-8806-430E-B5F1-F75C4A26DC73} 8 | Library 9 | Properties 10 | Persistence 11 | Persistence 12 | v4.5 13 | 512 14 | ..\ 15 | true 16 | 17 | 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | ..\packages\mongocsharpdriver.1.9.2\lib\net35\MongoDB.Bson.dll 37 | 38 | 39 | ..\packages\mongocsharpdriver.1.9.2\lib\net35\MongoDB.Driver.dll 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | {5476f7ee-8024-4f70-b257-a25fa3090e29} 52 | Domain 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 63 | 64 | 65 | 66 | 73 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | [Dd]ebug/ 11 | [Dd]ebugPublic/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | bld/ 16 | [Bb]in/ 17 | [Oo]bj/ 18 | 19 | # Roslyn cache directories 20 | *.ide/ 21 | 22 | # MSTest test Results 23 | [Tt]est[Rr]esult*/ 24 | [Bb]uild[Ll]og.* 25 | 26 | #NUNIT 27 | *.VisualState.xml 28 | TestResult.xml 29 | 30 | # Build Results of an ATL Project 31 | [Dd]ebugPS/ 32 | [Rr]eleasePS/ 33 | dlldata.c 34 | 35 | *_i.c 36 | *_p.c 37 | *_i.h 38 | *.ilk 39 | *.meta 40 | *.obj 41 | *.pch 42 | *.pdb 43 | *.pgc 44 | *.pgd 45 | *.rsp 46 | *.sbr 47 | *.tlb 48 | *.tli 49 | *.tlh 50 | *.tmp 51 | *.tmp_proj 52 | *.log 53 | *.vspscc 54 | *.vssscc 55 | .builds 56 | *.pidb 57 | *.svclog 58 | *.scc 59 | 60 | # Chutzpah Test files 61 | _Chutzpah* 62 | 63 | # Visual C++ cache files 64 | ipch/ 65 | *.aps 66 | *.ncb 67 | *.opensdf 68 | *.sdf 69 | *.cachefile 70 | 71 | # Visual Studio profiler 72 | *.psess 73 | *.vsp 74 | *.vspx 75 | 76 | # TFS 2012 Local Workspace 77 | $tf/ 78 | 79 | # Guidance Automation Toolkit 80 | *.gpState 81 | 82 | # ReSharper is a .NET coding add-in 83 | _ReSharper*/ 84 | *.[Rr]e[Ss]harper 85 | *.DotSettings.user 86 | 87 | # JustCode is a .NET coding addin-in 88 | .JustCode 89 | 90 | # TeamCity is a build add-in 91 | _TeamCity* 92 | 93 | # DotCover is a Code Coverage Tool 94 | *.dotCover 95 | 96 | # NCrunch 97 | _NCrunch_* 98 | .*crunch*.local.xml 99 | 100 | # MightyMoose 101 | *.mm.* 102 | AutoTest.Net/ 103 | 104 | # Web workbench (sass) 105 | .sass-cache/ 106 | 107 | # Installshield output folder 108 | [Ee]xpress/ 109 | 110 | # DocProject is a documentation generator add-in 111 | DocProject/buildhelp/ 112 | DocProject/Help/*.HxT 113 | DocProject/Help/*.HxC 114 | DocProject/Help/*.hhc 115 | DocProject/Help/*.hhk 116 | DocProject/Help/*.hhp 117 | DocProject/Help/Html2 118 | DocProject/Help/html 119 | 120 | # Click-Once directory 121 | publish/ 122 | 123 | # Publish Web Output 124 | *.[Pp]ublish.xml 125 | *.azurePubxml 126 | ## TODO: Comment the next line if you want to checkin your 127 | ## web deploy settings but do note that will include unencrypted 128 | ## passwords 129 | #*.pubxml 130 | 131 | # NuGet Packages Directory 132 | packages/* 133 | ## TODO: If the tool you use requires repositories.config 134 | ## uncomment the next line 135 | #!packages/repositories.config 136 | 137 | # Enable "build/" folder in the NuGet Packages folder since 138 | # NuGet packages use it for MSBuild targets. 139 | # This line needs to be after the ignore of the build folder 140 | # (and the packages folder if the line above has been uncommented) 141 | !packages/build/ 142 | 143 | # Windows Azure Build Output 144 | csx/ 145 | *.build.csdef 146 | 147 | # Windows Store app package directory 148 | AppPackages/ 149 | 150 | # Others 151 | sql/ 152 | *.Cache 153 | ClientBin/ 154 | [Ss]tyle[Cc]op.* 155 | ~$* 156 | *~ 157 | *.dbmdl 158 | *.dbproj.schemaview 159 | *.pfx 160 | *.publishsettings 161 | node_modules/ 162 | 163 | # RIA/Silverlight projects 164 | Generated_Code/ 165 | 166 | # Backup & report files from converting an old project file 167 | # to a newer Visual Studio version. Backup files are not needed, 168 | # because we have git ;-) 169 | _UpgradeReport_Files/ 170 | Backup*/ 171 | UpgradeLog*.XML 172 | UpgradeLog*.htm 173 | 174 | # SQL Server files 175 | *.mdf 176 | *.ldf 177 | 178 | # Business Intelligence projects 179 | *.rdl.data 180 | *.bim.layout 181 | *.bim_*.settings 182 | 183 | # Microsoft Fakes 184 | FakesAssemblies/ 185 | 186 | # LightSwitch generated files 187 | GeneratedArtifacts/ 188 | _Pvt_Extensions/ 189 | ModelManifest.xml 190 | /Domain/packages 191 | /EnterpriseApplication/packages 192 | -------------------------------------------------------------------------------- /EnterpriseApplication/CrossCuttingConcerns/CrossCuttingConcerns.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {78A4B427-9F7C-42DA-8816-FEEBDD3646FA} 8 | Library 9 | Properties 10 | CrossCuttingConcerns 11 | CrossCuttingConcerns 12 | v4.5 13 | 512 14 | ..\ 15 | true 16 | 17 | 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | ..\packages\Castle.Core.3.3.0\lib\net45\Castle.Core.dll 37 | 38 | 39 | ..\packages\Castle.LoggingFacility.3.3.0\lib\net45\Castle.Facilities.Logging.dll 40 | 41 | 42 | ..\packages\Castle.Core-log4net.3.3.0\lib\net45\Castle.Services.Logging.Log4netIntegration.dll 43 | 44 | 45 | ..\packages\Castle.Windsor.3.3.0\lib\net45\Castle.Windsor.dll 46 | 47 | 48 | ..\packages\log4net.1.2.10\lib\2.0\log4net.dll 49 | 50 | 51 | ..\packages\mongocsharpdriver.1.9.2\lib\net35\MongoDB.Bson.dll 52 | 53 | 54 | ..\packages\mongocsharpdriver.1.9.2\lib\net35\MongoDB.Driver.dll 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | {5657ed47-b3b1-4c06-9d22-05999814f364} 75 | Business 76 | 77 | 78 | {5476f7ee-8024-4f70-b257-a25fa3090e29} 79 | Domain 80 | 81 | 82 | {149c4677-8806-430e-b5f1-f75c4a26dc73} 83 | Persistence 84 | 85 | 86 | 87 | 88 | 89 | 90 | This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 91 | 92 | 93 | 94 | 101 | -------------------------------------------------------------------------------- /EnterpriseApplication/.nuget/NuGet.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildProjectDirectory)\..\ 5 | 6 | 7 | false 8 | 9 | 10 | false 11 | 12 | 13 | true 14 | 15 | 16 | false 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | 29 | 30 | $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) 31 | 32 | 33 | 34 | 35 | $(SolutionDir).nuget 36 | 37 | 38 | 39 | $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config 40 | $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config 41 | 42 | 43 | 44 | $(MSBuildProjectDirectory)\packages.config 45 | $(PackagesProjectConfig) 46 | 47 | 48 | 49 | 50 | $(NuGetToolsPath)\NuGet.exe 51 | @(PackageSource) 52 | 53 | "$(NuGetExePath)" 54 | mono --runtime=v4.0.30319 "$(NuGetExePath)" 55 | 56 | $(TargetDir.Trim('\\')) 57 | 58 | -RequireConsent 59 | -NonInteractive 60 | 61 | "$(SolutionDir) " 62 | "$(SolutionDir)" 63 | 64 | 65 | $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) 66 | $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols 67 | 68 | 69 | 70 | RestorePackages; 71 | $(BuildDependsOn); 72 | 73 | 74 | 75 | 76 | $(BuildDependsOn); 77 | BuildPackage; 78 | 79 | 80 | 81 | 82 | 83 | 84 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 99 | 100 | 103 | 104 | 105 | 106 | 108 | 109 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 141 | 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /EnterpriseApplication/Services/Services.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | 8 | 9 | 2.0 10 | {5B4F7D72-CFEA-447E-91E6-35E12BDD5D91} 11 | {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} 12 | Library 13 | Properties 14 | Services 15 | Services 16 | v4.5 17 | true 18 | 19 | 20 | 21 | 22 | ..\ 23 | true 24 | True 25 | 26 | 27 | true 28 | full 29 | false 30 | bin\ 31 | DEBUG;TRACE 32 | prompt 33 | 4 34 | 35 | 36 | pdbonly 37 | true 38 | bin\ 39 | TRACE 40 | prompt 41 | 4 42 | 43 | 44 | 45 | ..\packages\Castle.Core.3.3.0\lib\net45\Castle.Core.dll 46 | 47 | 48 | ..\packages\Castle.LoggingFacility.3.3.0\lib\net45\Castle.Facilities.Logging.dll 49 | 50 | 51 | ..\packages\Castle.WcfIntegrationFacility.3.3.0\lib\net45\Castle.Facilities.WcfIntegration.dll 52 | 53 | 54 | ..\packages\Castle.Core-log4net.3.3.0\lib\net45\Castle.Services.Logging.Log4netIntegration.dll 55 | 56 | 57 | ..\packages\Castle.Windsor.3.3.0\lib\net45\Castle.Windsor.dll 58 | 59 | 60 | ..\packages\log4net.1.2.10\lib\2.0\log4net.dll 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | Web.config 91 | 92 | 93 | Web.config 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | Global.asax 104 | 105 | 106 | 107 | InvoiceService.svc 108 | 109 | 110 | 111 | 112 | 113 | {5657ed47-b3b1-4c06-9d22-05999814f364} 114 | Business 115 | 116 | 117 | {78a4b427-9f7c-42da-8816-feebdd3646fa} 118 | CrossCuttingConcerns 119 | 120 | 121 | 122 | 10.0 123 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | True 133 | True 134 | 49771 135 | / 136 | http://localhost:49771/ 137 | False 138 | False 139 | 140 | 141 | False 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 150 | 151 | 152 | 153 | 160 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | --------------------------------------------------------------------------------