Commit 4782101

unknown <mo@.(none)>
2009-09-05 01:19:37
separated service contracts
1 parent 4109f7f
Changed files (70)
build
product
MoMoney.DTO
MoMoney.Presentation
MoMoney.Service
MyMoney
Service.Contracts
build/lib/app/gorilla/gorilla.commons.infrastructure.dll
Binary file
build/lib/app/gorilla/gorilla.commons.infrastructure.thirdparty.dll
Binary file
build/lib/app/gorilla/gorilla.commons.utility.dll
Binary file
build/lib/app/gorilla/gorilla.commons.windows.forms.dll
Binary file
build/lib/app/gorilla/gorilla.commons.windows.forms.thirdparty.dll
Binary file
product/MoMoney.DTO/IncomeSubmissionDto.cs
@@ -4,7 +4,7 @@ using System.Runtime.Serialization;
 namespace MoMoney.DTO
 {
     [DataContract]
-    public class IncomeSubmissionDto
+    public class IncomeSubmissionDTO
     {
         [DataMember]
         public Guid company_id { get; set; }
product/MoMoney.DTO/MoMoney.DTO.csproj
@@ -52,7 +52,7 @@
     <Compile Include="ApplicationVersion.cs" />
     <Compile Include="BillInformationDto.cs" />
     <Compile Include="CompanyDTO.cs" />
-    <Compile Include="IncomeSubmissionDto.cs" />
+    <Compile Include="IncomeSubmissionDTO.cs" />
     <Compile Include="IncomeInformationDTO.cs" />
     <Compile Include="MonthlySummaryDTO.cs" />
     <Compile Include="RegisterNewCompany.cs" />
product/MoMoney.Presentation/Model/Projects/ProjectController.cs
@@ -4,7 +4,7 @@ using Gorilla.Commons.Infrastructure.Logging;
 using Gorilla.Commons.Utility.Core;
 using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Presentation.Model.messages;
-using MoMoney.Service.Infrastructure;
+using MoMoney.Service.Contracts.Infrastructure;
 using MoMoney.Service.Infrastructure.Transactions;
 
 namespace MoMoney.Presentation.Model.Projects
product/MoMoney.Presentation/Model/Projects/ProjectControllerSpecs.cs
@@ -5,7 +5,7 @@ using Gorilla.Commons.Infrastructure.FileSystem;
 using Gorilla.Commons.Testing;
 using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Presentation.Model.messages;
-using MoMoney.Service.Infrastructure;
+using MoMoney.Service.Contracts.Infrastructure;
 using MoMoney.Service.Infrastructure.Transactions;
 
 namespace MoMoney.Presentation.Model.Projects
product/MoMoney.Presentation/Presenters/Billing/AddBillPaymentPresenter.cs
@@ -1,9 +1,9 @@
 using System.Collections.Generic;
-using Gorilla.Commons.Infrastructure;
 using MoMoney.DTO;
 using MoMoney.Presentation.Core;
 using MoMoney.Presentation.Views.billing;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
+using ICommandPump=MoMoney.Presentation.Presenters.Commands.ICommandPump;
 
 namespace MoMoney.Presentation.Presenters.billing
 {
product/MoMoney.Presentation/Presenters/Billing/ViewAllBillsPresenter.cs
@@ -1,9 +1,9 @@
 using System.Collections.Generic;
-using Gorilla.Commons.Infrastructure;
 using MoMoney.DTO;
 using MoMoney.Presentation.Core;
 using MoMoney.Presentation.Views.billing;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
+using ICommandPump=MoMoney.Presentation.Presenters.Commands.ICommandPump;
 
 namespace MoMoney.Presentation.Presenters.billing
 {
product/MoMoney.Presentation/Presenters/Commands/CommandFactory.cs
@@ -0,0 +1,25 @@
+using Gorilla.Commons.Infrastructure.Threading;
+using Gorilla.Commons.Utility.Core;
+
+namespace MoMoney.Presentation.Presenters.Commands
+{
+    public interface ICommandFactory
+    {
+        ICommand create_for<T>(ICallback<T> item, IQuery<T> query);
+    }
+
+    public class CommandFactory : ICommandFactory
+    {
+        readonly ISynchronizationContextFactory factory;
+
+        public CommandFactory(ISynchronizationContextFactory factory)
+        {
+            this.factory = factory;
+        }
+
+        public ICommand create_for<T>(ICallback<T> item, IQuery<T> query)
+        {
+            return new RunQueryCommand<T>(item, new ProcessQueryCommand<T>(query, factory));
+        }
+    }
+}
\ No newline at end of file
product/MoMoney.Presentation/Presenters/Commands/CommandPump.cs
@@ -0,0 +1,56 @@
+using Gorilla.Commons.Infrastructure.Container;
+using Gorilla.Commons.Infrastructure.Threading;
+using Gorilla.Commons.Utility.Core;
+
+namespace MoMoney.Presentation.Presenters.Commands
+{
+    public interface ICommandPump
+    {
+        ICommandPump run<Command>() where Command : ICommand;
+        ICommandPump run<Command>(Command command) where Command : ICommand;
+        ICommandPump run<Command, T>(T input) where Command : IParameterizedCommand<T>;
+        ICommandPump run<T>(ICallback<T> item, IQuery<T> query);
+        ICommandPump run<Output, Query>(ICallback<Output> item) where Query : IQuery<Output>;
+    }
+
+    public class CommandPump : ICommandPump
+    {
+        readonly ICommandProcessor processor;
+        readonly IDependencyRegistry registry;
+        readonly ICommandFactory factory;
+
+        public CommandPump(ICommandProcessor processor, IDependencyRegistry registry, ICommandFactory factory)
+        {
+            this.processor = processor;
+            this.factory = factory;
+            this.registry = registry;
+        }
+
+        public ICommandPump run<Command>() where Command : ICommand
+        {
+            return run(registry.get_a<Command>());
+        }
+
+        public ICommandPump run<Command>(Command command) where Command : ICommand
+        {
+            processor.add(command);
+            return this;
+        }
+
+        public ICommandPump run<Command, T>(T input) where Command : IParameterizedCommand<T>
+        {
+            processor.add(() => registry.get_a<Command>().run(input));
+            return this;
+        }
+
+        public ICommandPump run<T>(ICallback<T> item, IQuery<T> query)
+        {
+            return run(factory.create_for(item, query));
+        }
+
+        public ICommandPump run<Output, Query>(ICallback<Output> item) where Query : IQuery<Output>
+        {
+            return run(item, registry.get_a<Query>());
+        }
+    }
+}
\ No newline at end of file
product/MoMoney.Presentation/Presenters/Commands/ProcessQueryCommand.cs
@@ -0,0 +1,28 @@
+using System;
+using Gorilla.Commons.Infrastructure.Threading;
+using Gorilla.Commons.Utility.Core;
+
+namespace MoMoney.Presentation.Presenters.Commands
+{
+    public interface IProcessQueryCommand<T> : IParameterizedCommand<ICallback<T>>
+    {
+    }
+
+    public class ProcessQueryCommand<T> : IProcessQueryCommand<T>
+    {
+        readonly IQuery<T> query;
+        readonly ISynchronizationContextFactory factory;
+
+        public ProcessQueryCommand(IQuery<T> query, ISynchronizationContextFactory factory)
+        {
+            this.query = query;
+            this.factory = factory;
+        }
+
+        public void run(ICallback<T> callback)
+        {
+            var dto = query.fetch();
+            factory.create().run(new ActionCommand((Action) (() => callback.run(dto))));
+        }
+    }
+}
\ No newline at end of file
product/MoMoney.Presentation/Presenters/Commands/RunQueryCommand.cs
@@ -0,0 +1,25 @@
+using Gorilla.Commons.Utility.Core;
+
+namespace MoMoney.Presentation.Presenters.Commands
+{
+    public interface IRunQueryCommand<T> : ICommand
+    {
+    }
+
+    public class RunQueryCommand<T> : IRunQueryCommand<T>
+    {
+        readonly ICallback<T> callback;
+        readonly IProcessQueryCommand<T> command;
+
+        public RunQueryCommand(ICallback<T> callback, IProcessQueryCommand<T> command)
+        {
+            this.callback = callback;
+            this.command = command;
+        }
+
+        public void run()
+        {
+            command.run(callback);
+        }
+    }
+}
\ No newline at end of file
product/MoMoney.Presentation/Presenters/Income/AddNewIncomePresenter.cs
@@ -1,15 +1,15 @@
 using System.Collections.Generic;
-using Gorilla.Commons.Infrastructure;
 using MoMoney.DTO;
 using MoMoney.Presentation.Core;
+using MoMoney.Presentation.Presenters.Commands;
 using MoMoney.Presentation.Views.income;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Presentation.Presenters.income
 {
     public interface IAddNewIncomePresenter : IContentPresenter
     {
-        void submit_new(IncomeSubmissionDto income);
+        void submit_new(IncomeSubmissionDTO income);
     }
 
     public class AddNewIncomePresenter : ContentPresenter<IAddNewIncomeView>, IAddNewIncomePresenter
@@ -28,9 +28,9 @@ namespace MoMoney.Presentation.Presenters.income
             pump.run<IEnumerable<IncomeInformationDTO>, IGetAllIncomeQuery>(view);
         }
 
-        public void submit_new(IncomeSubmissionDto income)
+        public void submit_new(IncomeSubmissionDTO income)
         {
-            pump.run<IAddNewIncomeCommand, IncomeSubmissionDto>(income);
+            pump.run<IAddNewIncomeCommand, IncomeSubmissionDTO>(income);
             pump.run<IEnumerable<IncomeInformationDTO>, IGetAllIncomeQuery>(view);
         }
     }
product/MoMoney.Presentation/Presenters/Income/AddNewIncomePresenterSpecs.cs
@@ -1,10 +1,10 @@
 using System.Collections.Generic;
 using developwithpassion.bdd.contexts;
-using Gorilla.Commons.Infrastructure;
 using Gorilla.Commons.Testing;
 using MoMoney.DTO;
 using MoMoney.Presentation.Views.income;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
+using ICommandPump=MoMoney.Presentation.Presenters.Commands.ICommandPump;
 
 namespace MoMoney.Presentation.Presenters.income
 {
@@ -26,16 +26,16 @@ namespace MoMoney.Presentation.Presenters.income
     public class when_new_income_is_submitted : behaves_like_add_new_income_presenter
     {
         it should_add_the_income_to_the_account_holders_account =
-            () => pump.was_told_to(x => x.run<IAddNewIncomeCommand, IncomeSubmissionDto>(income));
+            () => pump.was_told_to(x => x.run<IAddNewIncomeCommand, IncomeSubmissionDTO>(income));
 
         it should_display_the_new_income =
             () => pump.was_told_to(x => x.run<IEnumerable<IncomeInformationDTO>, IGetAllIncomeQuery>(view));
 
-        context c = () => { income = new IncomeSubmissionDto {}; };
+        context c = () => { income = new IncomeSubmissionDTO {}; };
 
         because b = () => sut.submit_new(income);
 
-        static IncomeSubmissionDto income;
+        static IncomeSubmissionDTO income;
     }
 
     [Concern(typeof (AddNewIncomePresenter))]
product/MoMoney.Presentation/Presenters/Income/ViewIncomeHistoryPresenter.cs
@@ -1,9 +1,9 @@
 using System.Collections.Generic;
-using Gorilla.Commons.Infrastructure;
 using MoMoney.DTO;
 using MoMoney.Presentation.Core;
+using MoMoney.Presentation.Presenters.Commands;
 using MoMoney.Presentation.Views.income;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Presentation.Presenters.income
 {
product/MoMoney.Presentation/Presenters/Reporting/ReportPresenter.cs
@@ -1,7 +1,7 @@
 using MoMoney.Presentation.Core;
 using MoMoney.Presentation.Views.billing;
 using MoMoney.Presentation.Views.reporting;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Presentation.Presenters.reporting
 {
product/MoMoney.Presentation/Presenters/Shell/NotificationPresenter.cs
@@ -1,7 +1,7 @@
 using System.Text;
 using System.Windows.Forms;
+using Gorilla.Commons.Utility.Core;
 using Gorilla.Commons.Utility.Extensions;
-using MoMoney.Service.Application;
 
 namespace MoMoney.Presentation.Presenters.Shell
 {
product/MoMoney.Presentation/Presenters/Updates/CheckForUpdatesPresenter.cs
@@ -1,4 +1,3 @@
-using Gorilla.Commons.Infrastructure;
 using Gorilla.Commons.Infrastructure.Logging;
 using Gorilla.Commons.Utility;
 using Gorilla.Commons.Utility.Core;
@@ -6,6 +5,7 @@ using MoMoney.DTO;
 using MoMoney.Presentation.Core;
 using MoMoney.Presentation.Presenters.Commands;
 using MoMoney.Presentation.Views.updates;
+using MoMoney.Service.Contracts.Infrastructure.Updating;
 using MoMoney.Service.Infrastructure.Updating;
 using MoMoney.Tasks.infrastructure.updating;
 
product/MoMoney.Presentation/Presenters/Updates/CheckForUpdatesPresenterSpecs.cs
@@ -1,13 +1,14 @@
 using developwithpassion.bdd.contexts;
-using Gorilla.Commons.Infrastructure;
 using Gorilla.Commons.Testing;
 using Gorilla.Commons.Utility;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
 using MoMoney.Presentation.Presenters.Commands;
 using MoMoney.Presentation.Views.updates;
+using MoMoney.Service.Contracts.Infrastructure.Updating;
 using MoMoney.Service.Infrastructure.Updating;
 using MoMoney.Tasks.infrastructure.updating;
+using ICommandPump=MoMoney.Presentation.Presenters.Commands.ICommandPump;
 
 namespace MoMoney.Presentation.Presenters.updates
 {
product/MoMoney.Presentation/Presenters/AddCompanyPresenter.cs
@@ -1,9 +1,9 @@
 using System.Collections.Generic;
-using Gorilla.Commons.Infrastructure;
 using MoMoney.DTO;
 using MoMoney.Presentation.Core;
 using MoMoney.Presentation.Views;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
+using ICommandPump=MoMoney.Presentation.Presenters.Commands.ICommandPump;
 
 namespace MoMoney.Presentation.Presenters
 {
product/MoMoney.Presentation/Presenters/AddCompanyPresenterSpecs.cs
@@ -1,9 +1,9 @@
 using developwithpassion.bdd.contexts;
-using Gorilla.Commons.Infrastructure;
 using Gorilla.Commons.Testing;
 using MoMoney.DTO;
 using MoMoney.Presentation.Views;
-using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
+using ICommandPump=MoMoney.Presentation.Presenters.Commands.ICommandPump;
 
 namespace MoMoney.Presentation.Presenters
 {
product/MoMoney.Presentation/Views/Income/AddNewIncomeView.cs
@@ -39,9 +39,9 @@ namespace MoMoney.Presentation.Views.income
             ux_income_received_grid.DataSource = incomes.databind();
         }
 
-        IncomeSubmissionDto create_income()
+        IncomeSubmissionDTO create_income()
         {
-            return new IncomeSubmissionDto
+            return new IncomeSubmissionDTO
                        {
                            company_id = companies_list.get_selected_item().id,
                            amount = ux_amount.Text.to_double(),
product/MoMoney.Presentation/MoMoney.Presentation.csproj
@@ -111,6 +111,8 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Presenters\Commands\CommandFactory.cs" />
+    <Compile Include="Presenters\Commands\CommandPump.cs" />
     <Compile Include="Core\ApplicationController.cs" />
     <Compile Include="Core\ApplicationControllerSpecs.cs" />
     <Compile Include="Core\ApplicationEnvironment.cs" />
@@ -231,8 +233,10 @@
     <Compile Include="Presenters\Startup\SplashScreenPresenterSpecs.cs" />
     <Compile Include="Presenters\Updates\CheckForUpdatesPresenter.cs" />
     <Compile Include="Presenters\Updates\CheckForUpdatesPresenterSpecs.cs" />
+    <Compile Include="Presenters\Commands\ProcessQueryCommand.cs" />
     <Compile Include="Resources\ApplicationIcons.cs" />
     <Compile Include="Resources\ApplicationImages.cs" />
+    <Compile Include="Presenters\Commands\RunQueryCommand.cs" />
     <Compile Include="Views\AddCompanyView.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -454,9 +458,9 @@
       <Project>{ACF52FAB-435B-48C9-A383-C787CB2D8000}</Project>
       <Name>MoMoney.DTO</Name>
     </ProjectReference>
-    <ProjectReference Include="..\MoMoney.Service\MoMoney.Service.csproj">
-      <Project>{7EA4C557-6EF2-4B1F-85C8-5B3F51BAD8DB}</Project>
-      <Name>MoMoney.Service</Name>
+    <ProjectReference Include="..\Service.Contracts\Service.Contracts.csproj">
+      <Project>{41D2B68B-031B-44FF-BAC5-7752D9E29F94}</Project>
+      <Name>Service.Contracts</Name>
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
product/MoMoney.Service/Application/AddNewIncomeCommand.cs
@@ -1,19 +1,21 @@
 using System.Linq;
+using Gorilla.Commons.Utility.Core;
 using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Domain.Core;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Service.Application
 {
     public class AddNewIncomeCommand : IAddNewIncomeCommand
     {
-        readonly ICustomerTasks tasks;
+        readonly IGetTheCurrentCustomerQuery tasks;
         readonly INotification notification;
         readonly IIncomeRepository all_income;
         readonly ICompanyRepository companys;
 
-        public AddNewIncomeCommand(ICustomerTasks tasks, INotification notification, IIncomeRepository all_income,
+        public AddNewIncomeCommand(IGetTheCurrentCustomerQuery tasks, INotification notification, IIncomeRepository all_income,
                                    ICompanyRepository companys)
         {
             this.tasks = tasks;
@@ -22,7 +24,7 @@ namespace MoMoney.Service.Application
             this.companys = companys;
         }
 
-        public void run(IncomeSubmissionDto item)
+        public void run(IncomeSubmissionDTO item)
         {
             if (similar_income_has_been_submitted(item))
             {
@@ -33,14 +35,14 @@ namespace MoMoney.Service.Application
                 companys
                     .find_company_by(item.company_id)
                     .pay(
-                    tasks.get_the_current_customer(),
+                    tasks.fetch(),
                     item.amount.as_money(),
                     item.recieved_date
                     );
             }
         }
 
-        bool similar_income_has_been_submitted(IncomeSubmissionDto income)
+        bool similar_income_has_been_submitted(IncomeSubmissionDTO income)
         {
             if (all_income.all().Count() == 0) return false;
             return all_income
product/MoMoney.Service/Application/AddNewIncomeCommandSpecs.cs
@@ -7,6 +7,7 @@ using MoMoney.Domain.Accounting;
 using MoMoney.Domain.Core;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Service.Application
 {
@@ -20,13 +21,13 @@ namespace MoMoney.Service.Application
         context c = () =>
                         {
                             notification = the_dependency<INotification>();
-                            tasks = the_dependency<ICustomerTasks>();
+                            tasks = the_dependency<IGetTheCurrentCustomerQuery>();
                             all_income = the_dependency<IIncomeRepository>();
                             companies = the_dependency<ICompanyRepository>();
                         };
 
         static protected INotification notification;
-        static protected ICustomerTasks tasks;
+        static protected IGetTheCurrentCustomerQuery tasks;
         static protected IIncomeRepository all_income;
         static protected ICompanyRepository companies;
     }
@@ -44,7 +45,7 @@ namespace MoMoney.Service.Application
                             var today = new Date(2008, 12, 26);
                             Id<Guid> id = Guid.NewGuid();
 
-                            income = new IncomeSubmissionDto
+                            income = new IncomeSubmissionDTO
                                          {
                                              amount = 100.00,
                                              company_id = id,
@@ -60,6 +61,6 @@ namespace MoMoney.Service.Application
 
         because b = () => sut.run(income);
 
-        static IncomeSubmissionDto income;
+        static IncomeSubmissionDTO income;
     }
 }
\ No newline at end of file
product/MoMoney.Service/Application/GetAllBillsQuery.cs
@@ -4,6 +4,7 @@ using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Service.Application
 {
product/MoMoney.Service/Application/GetAllCompanysQuery.cs
@@ -4,6 +4,7 @@ using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Service.Application
 {
product/MoMoney.Service/Application/GetAllIncomeQuery.cs
@@ -4,6 +4,7 @@ using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Service.Application
 {
product/MoMoney.Service/Application/CustomerTasks.cs → product/MoMoney.Service/Application/GetTheCurrentCustomerQuery.cs
@@ -1,24 +1,24 @@
 using System.Linq;
+using Gorilla.Commons.Utility.Core;
 using MoMoney.Domain.accounting;
 using MoMoney.Domain.repositories;
 
 namespace MoMoney.Service.Application
 {
-    public interface ICustomerTasks
+    public interface IGetTheCurrentCustomerQuery : IQuery<IAccountHolder>
     {
-        IAccountHolder get_the_current_customer();
     }
 
-    public class CustomerTasks : ICustomerTasks
+    public class GetTheCurrentCustomerQuery : IGetTheCurrentCustomerQuery
     {
         readonly IAccountHolderRepository account_holders;
 
-        public CustomerTasks(IAccountHolderRepository account_holders)
+        public GetTheCurrentCustomerQuery(IAccountHolderRepository account_holders)
         {
             this.account_holders = account_holders;
         }
 
-        public IAccountHolder get_the_current_customer()
+        public IAccountHolder fetch()
         {
             var c = account_holders.all().SingleOrDefault();
 
product/MoMoney.Service/Application/INotification.cs
@@ -1,7 +0,0 @@
-namespace MoMoney.Service.Application
-{
-    public interface INotification
-    {
-        void notify(params NotificationMessage[] messages);
-    }
-}
\ No newline at end of file
product/MoMoney.Service/Application/NotificationMessage.cs
@@ -1,46 +0,0 @@
-using System.Runtime.Serialization;
-
-namespace MoMoney.Service.Application
-{
-    [DataContract]
-    public class NotificationMessage
-    {
-        [DataMember]
-        public string message { get; set; }
-
-        static public implicit operator string(NotificationMessage message)
-        {
-            return message.ToString();
-        }
-
-        static public implicit operator NotificationMessage(string message)
-        {
-            return new NotificationMessage {message = message};
-        }
-
-        public override string ToString()
-        {
-            return message;
-        }
-
-        public bool Equals(NotificationMessage obj)
-        {
-            if (ReferenceEquals(null, obj)) return false;
-            if (ReferenceEquals(this, obj)) return true;
-            return Equals(obj.message, message);
-        }
-
-        public override bool Equals(object obj)
-        {
-            if (ReferenceEquals(null, obj)) return false;
-            if (ReferenceEquals(this, obj)) return true;
-            if (obj.GetType() != typeof (NotificationMessage)) return false;
-            return Equals((NotificationMessage) obj);
-        }
-
-        public override int GetHashCode()
-        {
-            return (message != null ? message.GetHashCode() : 0);
-        }
-    }
-}
\ No newline at end of file
product/MoMoney.Service/Application/RegisterNewCompanyCommand.cs
@@ -1,8 +1,10 @@
 using System.Linq;
+using Gorilla.Commons.Utility.Core;
 using Gorilla.Commons.Utility.Extensions;
 using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Service.Application
 {
@@ -12,7 +14,8 @@ namespace MoMoney.Service.Application
         readonly INotification notification;
         readonly ICompanyRepository companies;
 
-        public RegisterNewCompanyCommand(ICompanyFactory factory, INotification notification, ICompanyRepository companies)
+        public RegisterNewCompanyCommand(ICompanyFactory factory, INotification notification,
+                                         ICompanyRepository companies)
         {
             this.factory = factory;
             this.notification = notification;
product/MoMoney.Service/Application/SaveNewBillCommand.cs
@@ -1,15 +1,16 @@
 using MoMoney.Domain.Core;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.Service.Application
 {
     public class SaveNewBillCommand : ISaveNewBillCommand
     {
         readonly ICompanyRepository companys;
-        readonly ICustomerTasks tasks;
+        readonly IGetTheCurrentCustomerQuery tasks;
 
-        public SaveNewBillCommand(ICompanyRepository companys, ICustomerTasks tasks)
+        public SaveNewBillCommand(ICompanyRepository companys, IGetTheCurrentCustomerQuery tasks)
         {
             this.companys = companys;
             this.tasks = tasks;
@@ -20,7 +21,7 @@ namespace MoMoney.Service.Application
             companys
                 .find_company_by(item.company_id)
                 .issue_bill_to(
-                tasks.get_the_current_customer(),
+                tasks.fetch(),
                 item.due_date,
                 item.total.as_money()
                 );
product/MoMoney.Service/Infrastructure/Logging/LogFileTasks.cs
@@ -3,12 +3,6 @@ using Gorilla.Commons.Infrastructure.Reflection;
 
 namespace MoMoney.Service.Infrastructure.Logging
 {
-    public interface ILogFileTasks
-    {
-        string get_the_contents_of_the_log_file();
-        string get_the_path_to_the_log_file();
-    }
-
     public class LogFileTasks : ILogFileTasks
     {
         public string get_the_contents_of_the_log_file()
product/MoMoney.Service/Infrastructure/Transactions/UnitOfWork.cs
@@ -1,14 +1,7 @@
-using System;
 using Gorilla.Commons.Infrastructure.Transactions;
 
 namespace MoMoney.Service.Infrastructure.Transactions
 {
-    public interface IUnitOfWork : IDisposable
-    {
-        void commit();
-        bool is_dirty();
-    }
-
     public class UnitOfWork : IUnitOfWork
     {
         readonly ISession session;
product/MoMoney.Service/Infrastructure/Transactions/UnitOfWorkFactory.cs
@@ -1,12 +1,8 @@
 using Gorilla.Commons.Infrastructure.Transactions;
-using Gorilla.Commons.Utility.Core;
+using MoMoney.Service.Contracts.Infrastructure.Transactions;
 
 namespace MoMoney.Service.Infrastructure.Transactions
 {
-    public interface IUnitOfWorkFactory : IFactory<IUnitOfWork>
-    {
-    }
-
     public class UnitOfWorkFactory : IUnitOfWorkFactory
     {
         readonly IContext context;
product/MoMoney.Service/Infrastructure/Transactions/UnitOfWorkFactorySpecs.cs
@@ -1,6 +1,7 @@
 using developwithpassion.bdd.contexts;
 using Gorilla.Commons.Infrastructure.Transactions;
 using Gorilla.Commons.Testing;
+using MoMoney.Service.Contracts.Infrastructure.Transactions;
 
 namespace MoMoney.Service.Infrastructure.Transactions
 {
product/MoMoney.Service/Infrastructure/Updating/CancelUpdate.cs
@@ -1,11 +1,7 @@
-using Gorilla.Commons.Utility.Core;
+using MoMoney.Tasks.infrastructure.updating;
 
-namespace MoMoney.Tasks.infrastructure.updating
+namespace MoMoney.Service.Infrastructure.Updating
 {
-    public interface ICancelUpdate : ICommand
-    {
-    }
-
     public class CancelUpdate : ICancelUpdate
     {
         readonly IDeployment deployment;
product/MoMoney.Service/Infrastructure/Updating/CancelUpdateSpecs.cs
@@ -1,5 +1,6 @@
 using developwithpassion.bdd.contexts;
 using Gorilla.Commons.Testing;
+using MoMoney.Service.Infrastructure.Updating;
 
 namespace MoMoney.Tasks.infrastructure.updating
 {
product/MoMoney.Service/Infrastructure/Updating/CurrentDeployment.cs
@@ -1,6 +1,7 @@
 using System;
 using System.ComponentModel;
 using System.Deployment.Application;
+using MoMoney.Service.Infrastructure.Updating;
 
 namespace MoMoney.Tasks.infrastructure.updating
 {
product/MoMoney.Service/Infrastructure/Updating/DownloadTheLatestVersion.cs
@@ -1,14 +1,8 @@
-using Gorilla.Commons.Infrastructure;
 using Gorilla.Commons.Utility;
 using Gorilla.Commons.Utility.Core;
-using MoMoney.Tasks.infrastructure.updating;
 
 namespace MoMoney.Service.Infrastructure.Updating
 {
-    public interface IDownloadTheLatestVersion : ICallbackCommand<Percent>
-    {
-    }
-
     public class DownloadTheLatestVersion : IDownloadTheLatestVersion
     {
         readonly IDeployment deployment;
product/MoMoney.Service/Infrastructure/Updating/IDeployment.cs
@@ -2,7 +2,7 @@ using System;
 using System.ComponentModel;
 using System.Deployment.Application;
 
-namespace MoMoney.Tasks.infrastructure.updating
+namespace MoMoney.Service.Infrastructure.Updating
 {
     public interface IDeployment
     {
product/MoMoney.Service/Infrastructure/Updating/NullDeployment.cs
@@ -2,6 +2,7 @@ using System;
 using System.ComponentModel;
 using System.Deployment.Application;
 using System.Threading;
+using MoMoney.Service.Infrastructure.Updating;
 
 namespace MoMoney.Tasks.infrastructure.updating
 {
product/MoMoney.Service/Infrastructure/Updating/WhatIsTheAvailableVersion.cs
@@ -1,13 +1,8 @@
-using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
-using MoMoney.Tasks.infrastructure.updating;
+using MoMoney.Service.Contracts.Infrastructure.Updating;
 
 namespace MoMoney.Service.Infrastructure.Updating
 {
-    public interface IWhatIsTheAvailableVersion : IQuery<ApplicationVersion>
-    {
-    }
-
     public class WhatIsTheAvailableVersion : IWhatIsTheAvailableVersion
     {
         readonly IDeployment deployment;
product/MoMoney.Service/Infrastructure/ProjectTasks.cs
@@ -1,15 +1,9 @@
 using Gorilla.Commons.Infrastructure.FileSystem;
 using MoMoney.DataAccess;
+using MoMoney.Service.Contracts.Infrastructure;
 
 namespace MoMoney.Service.Infrastructure
 {
-    public interface IProjectTasks
-    {
-        void open(IFile file);
-        void copy_to(string path);
-        void close(string path);
-    }
-
     public class ProjectTasks : IProjectTasks
     {
         readonly IDatabaseConfiguration configuration;
product/MoMoney.Service/MoMoney.Service.csproj
@@ -78,19 +78,11 @@
   <ItemGroup>
     <Compile Include="Application\AddNewIncomeCommand.cs" />
     <Compile Include="Application\AddNewIncomeCommandSpecs.cs" />
-    <Compile Include="Application\CustomerTasks.cs" />
+    <Compile Include="Application\GetTheCurrentCustomerQuery.cs" />
     <Compile Include="Application\EventLog.cs" />
     <Compile Include="Application\GetAllBillsQuery.cs" />
     <Compile Include="Application\GetAllCompanysQuery.cs" />
     <Compile Include="Application\GetAllIncomeQuery.cs" />
-    <Compile Include="Application\IAddNewIncomeCommand.cs" />
-    <Compile Include="Application\IGetAllBillsQuery.cs" />
-    <Compile Include="Application\IGetAllCompanysQuery.cs" />
-    <Compile Include="Application\IGetAllIncomeQuery.cs" />
-    <Compile Include="Application\INotification.cs" />
-    <Compile Include="Application\IRegisterNewCompanyCommand.cs" />
-    <Compile Include="Application\ISaveNewBillCommand.cs" />
-    <Compile Include="Application\NotificationMessage.cs" />
     <Compile Include="Application\RegisterNewCompanyCommand.cs" />
     <Compile Include="Application\SaveNewBillCommand.cs" />
     <Compile Include="Infrastructure\Logging\LogFileTasks.cs" />
@@ -124,6 +116,10 @@
       <Project>{ACF52FAB-435B-48C9-A383-C787CB2D8000}</Project>
       <Name>MoMoney.DTO</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Service.Contracts\Service.Contracts.csproj">
+      <Project>{41D2B68B-031B-44FF-BAC5-7752D9E29F94}</Project>
+      <Name>Service.Contracts</Name>
+    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <Folder Include="Domain\" />
product/MyMoney/boot/container/registration/proxy_configuration/UnitOfWorkInterceptor.cs
@@ -1,6 +1,7 @@
 using Castle.Core.Interceptor;
 using Gorilla.Commons.Infrastructure.Eventing;
 using Gorilla.Commons.Utility.Core;
+using MoMoney.Service.Contracts.Infrastructure.Transactions;
 using MoMoney.Service.Infrastructure.Transactions;
 
 namespace MoMoney.boot.container.registration.proxy_configuration
product/MyMoney/boot/container/registration/wire_up_the_data_access_components_into_the.cs
@@ -8,11 +8,12 @@ using MoMoney.boot.container.registration.proxy_configuration;
 using MoMoney.DataAccess;
 using MoMoney.DataAccess.Db40;
 using MoMoney.DataAccess.Transactions;
+using MoMoney.Service.Contracts.Infrastructure.Transactions;
 using MoMoney.Service.Infrastructure.Transactions;
 
 namespace MoMoney.boot.container.registration
 {
-    internal class wire_up_the_data_access_components_into_the : ICommand
+    class wire_up_the_data_access_components_into_the : ICommand
     {
         readonly IDependencyRegistration register;
 
product/MyMoney/boot/container/registration/wire_up_the_infrastructure_in_to_the.cs
@@ -9,6 +9,8 @@ using Gorilla.Commons.Infrastructure.Threading;
 using Gorilla.Commons.Infrastructure.Transactions;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.Presentation.Model.Projects;
+using MoMoney.Presentation.Presenters.Commands;
+using MoMoney.Service.Infrastructure.Updating;
 using MoMoney.Tasks.infrastructure.updating;
 
 namespace MoMoney.boot.container.registration
product/MyMoney/boot/container/registration/wire_up_the_services_in_to_the.cs
@@ -4,7 +4,9 @@ using MoMoney.boot.container.registration.proxy_configuration;
 using MoMoney.Domain.Accounting;
 using MoMoney.Domain.repositories;
 using MoMoney.DTO;
+using MoMoney.Presentation.Presenters.Shell;
 using MoMoney.Service.Application;
+using MoMoney.Service.Contracts.Application;
 
 namespace MoMoney.boot.container.registration
 {
@@ -19,8 +21,8 @@ namespace MoMoney.boot.container.registration
 
         public void run()
         {
-            registry.proxy<ICustomerTasks, ServiceLayerConfiguration<ICustomerTasks>>(
-                () => new CustomerTasks(Lazy.load<IAccountHolderRepository>()));
+            registry.proxy<IGetTheCurrentCustomerQuery, ServiceLayerConfiguration<IGetTheCurrentCustomerQuery>>(
+                () => new GetTheCurrentCustomerQuery(Lazy.load<IAccountHolderRepository>()));
 
             wire_up_queries();
             wire_up_the_commands();
@@ -43,11 +45,11 @@ namespace MoMoney.boot.container.registration
                 new RegisterNewCompanyCommand(Lazy.load<ICompanyFactory>(), Lazy.load<INotification>(),
                                               Lazy.load<ICompanyRepository>()));
             registry.proxy<ISaveNewBillCommand, ServiceLayerConfiguration<ISaveNewBillCommand>>(
-                () => new SaveNewBillCommand(Lazy.load<ICompanyRepository>(), Lazy.load<ICustomerTasks>()));
+                () => new SaveNewBillCommand(Lazy.load<ICompanyRepository>(), Lazy.load<IGetTheCurrentCustomerQuery>()));
 
             registry.proxy<IAddNewIncomeCommand, ServiceLayerConfiguration<IAddNewIncomeCommand>>(
                 () =>
-                new AddNewIncomeCommand(Lazy.load<ICustomerTasks>(), Lazy.load<INotification>(),
+                new AddNewIncomeCommand(Lazy.load<IGetTheCurrentCustomerQuery>(), Lazy.load<INotification>(),
                                         Lazy.load<IIncomeRepository>(), Lazy.load<ICompanyRepository>()));
         }
     }
product/MyMoney/MyMoney.csproj
@@ -220,6 +220,10 @@
       <Project>{7EA4C557-6EF2-4B1F-85C8-5B3F51BAD8DB}</Project>
       <Name>MoMoney.Service</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Service.Contracts\Service.Contracts.csproj">
+      <Project>{41D2B68B-031B-44FF-BAC5-7752D9E29F94}</Project>
+      <Name>Service.Contracts</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
product/MoMoney.Service/Application/IAddNewIncomeCommand.cs → product/Service.Contracts/Application/IAddNewIncomeCommand.cs
@@ -2,10 +2,10 @@ using System.ServiceModel;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
 
-namespace MoMoney.Service.Application
+namespace MoMoney.Service.Contracts.Application
 {
     [ServiceContract]
-    public interface IAddNewIncomeCommand : IParameterizedCommand<IncomeSubmissionDto>
+    public interface IAddNewIncomeCommand : IParameterizedCommand<IncomeSubmissionDTO>
     {
     }
 }
\ No newline at end of file
product/MoMoney.Service/Application/IGetAllBillsQuery.cs → product/Service.Contracts/Application/IGetAllBillsQuery.cs
@@ -3,7 +3,7 @@ using System.ServiceModel;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
 
-namespace MoMoney.Service.Application
+namespace MoMoney.Service.Contracts.Application
 {
     [ServiceContract]
     public interface IGetAllBillsQuery : IQuery<IEnumerable<BillInformationDTO>>
product/MoMoney.Service/Application/IGetAllCompanysQuery.cs → product/Service.Contracts/Application/IGetAllCompanysQuery.cs
@@ -3,7 +3,7 @@ using System.ServiceModel;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
 
-namespace MoMoney.Service.Application
+namespace MoMoney.Service.Contracts.Application
 {
     [ServiceContract]
     public interface IGetAllCompanysQuery : IQuery<IEnumerable<CompanyDTO>>
product/MoMoney.Service/Application/IGetAllIncomeQuery.cs → product/Service.Contracts/Application/IGetAllIncomeQuery.cs
@@ -3,7 +3,7 @@ using System.ServiceModel;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
 
-namespace MoMoney.Service.Application
+namespace MoMoney.Service.Contracts.Application
 {
     [ServiceContract]
     public interface IGetAllIncomeQuery : IQuery<IEnumerable<IncomeInformationDTO>>
product/MoMoney.Service/Application/IRegisterNewCompanyCommand.cs → product/Service.Contracts/Application/IRegisterNewCompanyCommand.cs
@@ -2,7 +2,7 @@ using System.ServiceModel;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
 
-namespace MoMoney.Service.Application
+namespace MoMoney.Service.Contracts.Application
 {
     [ServiceContract]
     public interface IRegisterNewCompanyCommand : IParameterizedCommand<RegisterNewCompany>
product/MoMoney.Service/Application/ISaveNewBillCommand.cs → product/Service.Contracts/Application/ISaveNewBillCommand.cs
@@ -2,7 +2,7 @@ using System.ServiceModel;
 using Gorilla.Commons.Utility.Core;
 using MoMoney.DTO;
 
-namespace MoMoney.Service.Application
+namespace MoMoney.Service.Contracts.Application
 {
     [ServiceContract]
     public interface ISaveNewBillCommand : IParameterizedCommand<AddNewBillDTO>
product/Service.Contracts/Infrastructure/Logging/ILogFileTasks.cs
@@ -0,0 +1,8 @@
+namespace MoMoney.Service.Infrastructure.Logging
+{
+    public interface ILogFileTasks
+    {
+        string get_the_contents_of_the_log_file();
+        string get_the_path_to_the_log_file();
+    }
+}
\ No newline at end of file
product/Service.Contracts/Infrastructure/Transactions/IUnitOfWork.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace MoMoney.Service.Infrastructure.Transactions
+{
+    public interface IUnitOfWork : IDisposable
+    {
+        void commit();
+        bool is_dirty();
+    }
+}
\ No newline at end of file
product/Service.Contracts/Infrastructure/Transactions/IUnitOfWorkFactory.cs
@@ -0,0 +1,9 @@
+using Gorilla.Commons.Utility.Core;
+using MoMoney.Service.Infrastructure.Transactions;
+
+namespace MoMoney.Service.Contracts.Infrastructure.Transactions
+{
+    public interface IUnitOfWorkFactory : IFactory<IUnitOfWork>
+    {
+    }
+}
\ No newline at end of file
product/Service.Contracts/Infrastructure/Updating/ICancelUpdate.cs
@@ -0,0 +1,8 @@
+using Gorilla.Commons.Utility.Core;
+
+namespace MoMoney.Tasks.infrastructure.updating
+{
+    public interface ICancelUpdate : ICommand
+    {
+    }
+}
\ No newline at end of file
product/Service.Contracts/Infrastructure/Updating/IDownloadTheLatestVersion.cs
@@ -0,0 +1,9 @@
+using Gorilla.Commons.Utility;
+using Gorilla.Commons.Utility.Core;
+
+namespace MoMoney.Service.Infrastructure.Updating
+{
+    public interface IDownloadTheLatestVersion : ICallbackCommand<Percent>
+    {
+    }
+}
\ No newline at end of file
product/Service.Contracts/Infrastructure/Updating/IWhatIsTheAvailableVersion.cs
@@ -0,0 +1,9 @@
+using Gorilla.Commons.Utility.Core;
+using MoMoney.DTO;
+
+namespace MoMoney.Service.Contracts.Infrastructure.Updating
+{
+    public interface IWhatIsTheAvailableVersion : IQuery<ApplicationVersion>
+    {
+    }
+}
\ No newline at end of file
product/Service.Contracts/Infrastructure/IProjectTasks.cs
@@ -0,0 +1,11 @@
+using Gorilla.Commons.Infrastructure.FileSystem;
+
+namespace MoMoney.Service.Contracts.Infrastructure
+{
+    public interface IProjectTasks
+    {
+        void open(IFile file);
+        void copy_to(string path);
+        void close(string path);
+    }
+}
\ No newline at end of file
product/Service.Contracts/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Service.Contracts")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("Service.Contracts")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("282179e4-18a7-450c-87e3-1a6b64c921d5")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
product/Service.Contracts/Service.Contracts.csproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{41D2B68B-031B-44FF-BAC5-7752D9E29F94}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MoMoney.Service.Contracts</RootNamespace>
+    <AssemblyName>MoMoney.Service.Contracts</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="gorilla.commons.infrastructure, Version=2009.9.4.1823, Culture=neutral, PublicKeyToken=687787ccb6c36c9f, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\build\lib\app\gorilla\gorilla.commons.infrastructure.dll</HintPath>
+    </Reference>
+    <Reference Include="gorilla.commons.utility, Version=2009.9.4.1823, Culture=neutral, PublicKeyToken=687787ccb6c36c9f, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\build\lib\app\gorilla\gorilla.commons.utility.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Application\IAddNewIncomeCommand.cs" />
+    <Compile Include="Application\IGetAllBillsQuery.cs" />
+    <Compile Include="Application\IGetAllCompanysQuery.cs" />
+    <Compile Include="Application\IGetAllIncomeQuery.cs" />
+    <Compile Include="Application\IRegisterNewCompanyCommand.cs" />
+    <Compile Include="Application\ISaveNewBillCommand.cs" />
+    <Compile Include="Infrastructure\IProjectTasks.cs" />
+    <Compile Include="Infrastructure\Logging\ILogFileTasks.cs" />
+    <Compile Include="Infrastructure\Transactions\IUnitOfWork.cs" />
+    <Compile Include="Infrastructure\Transactions\IUnitOfWorkFactory.cs" />
+    <Compile Include="Infrastructure\Updating\ICancelUpdate.cs" />
+    <Compile Include="Infrastructure\Updating\IDownloadTheLatestVersion.cs" />
+    <Compile Include="Infrastructure\Updating\IWhatIsTheAvailableVersion.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\MoMoney.DTO\MoMoney.DTO.csproj">
+      <Project>{ACF52FAB-435B-48C9-A383-C787CB2D8000}</Project>
+      <Name>MoMoney.DTO</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Domain\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
solution.sln
@@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoMoney.DTO", "product\MoMo
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoMoney.Presentation", "product\MoMoney.Presentation\MoMoney.Presentation.csproj", "{D7C83DB3-492D-4514-8C53-C57AD8E7ACE7}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Service.Contracts", "product\Service.Contracts\Service.Contracts.csproj", "{41D2B68B-031B-44FF-BAC5-7752D9E29F94}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -49,6 +51,10 @@ Global
 		{D7C83DB3-492D-4514-8C53-C57AD8E7ACE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{D7C83DB3-492D-4514-8C53-C57AD8E7ACE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D7C83DB3-492D-4514-8C53-C57AD8E7ACE7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{41D2B68B-031B-44FF-BAC5-7752D9E29F94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{41D2B68B-031B-44FF-BAC5-7752D9E29F94}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{41D2B68B-031B-44FF-BAC5-7752D9E29F94}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{41D2B68B-031B-44FF-BAC5-7752D9E29F94}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE