using Admin.Classes.Models; using Admin.Classes.Resolvers; using Admin.Classes.Security; using Admin.Controllers; using Admin.Interfaces.Commands; using Admin.Interfaces.ModelBuilders; using Admin.Interfaces.Resolvers; using BusinessLogic.Authentication.Identity; using BusinessLogic.Interfaces.Security; using BusinessLogic.Models; using BusinessLogic.Security; using DataAccess.Persistence; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.IO.Abstractions; using System.Web; using System.Web.Mvc; using Unity; using Unity.AspNet.Mvc; using Unity.Injection; using Unity.log4net; using Commands = Admin.Classes.Commands; using ViewModelBuilders = Admin.Classes.ViewModelBuilders; using ViewModels = Admin.Models; namespace Admin { [ExcludeFromCodeCoverage] public static class UnityConfig { #region Unity Container private static Lazy container = new Lazy(() => { var container = new UnityContainer(); RegisterTypes(container); return container; }); /// /// Configured Unity Container. /// public static IUnityContainer Container => container.Value; #endregion /// /// Registers the type mappings with the Unity container. /// /// The unity container to configure. /// /// There is no need to register concrete types such as controllers or /// API controllers (unless you want to change the defaults), as Unity /// allows resolving a concrete type even if it was not previously /// registered. /// public static void RegisterTypes(IUnityContainer container) { // NOTE: To load from web.config uncomment the line below. // Make sure to add a Unity.Configuration to the using statements. // container.LoadConfiguration(); container.RegisterType(new PerRequestLifetimeManager()); container.RegisterType(new PerRequestLifetimeManager()); container.RegisterType(new PerRequestLifetimeManager()); container.RegisterType(new PerRequestLifetimeManager()); container.RegisterType(new PerRequestLifetimeManager()); container.RegisterType, UserStore>(new PerRequestLifetimeManager()); container.RegisterFactory(c => HttpContext.Current.GetOwinContext().Authentication); container.RegisterType, RoleStore>(new InjectionConstructor(typeof(IncomeDbContext))); RegisterBuildersAndCommands(container); RegisterControllerDependencies(container); RegisterOther(container); BusinessLogic.UnityConfig.RegisterComponents(container); DataAccess.UnityConfig.RegisterComponents(container); log4net.Config.XmlConfigurator.Configure(); container.AddNewExtension(); container.AddExtension(new Diagnostic()); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); } private static void RegisterBuildersAndCommands(IUnityContainer container) { container .RegisterType, ViewModelBuilders.AccountHolder.ListViewModelBuilder>() .RegisterType, ViewModelBuilders.AccountHolder.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.AccountHolder.EditViewModelBuilder>() .RegisterType, Commands.AccountHolder.LookupCommand>("Lookup") .RegisterType, Commands.AccountHolder.CreateCommand>("Create") .RegisterType, Commands.AccountHolder.EditCommand>("Edit") .RegisterType, ViewModelBuilders.FundGroup.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.FundGroup.CreateViewModelBuilder>("Create") .RegisterType, ViewModelBuilders.FundGroup.EditViewModelBuilder>("Edit") .RegisterType, int>, ViewModelBuilders.FundGroup.ListViewModelBuilder>() .RegisterType, Commands.FundGroup.CreateCommand>("Create") .RegisterType, Commands.FundGroup.EditCommand>("Edit") .RegisterType, Commands.FundGroup.DeleteCommand>("FundGroup.Command.Delete") .RegisterType, ViewModelBuilders.EReturn.ListViewModelBuilder>() .RegisterType, ViewModelBuilders.EReturn.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.EReturn.DetailsViewModelBuilder>("EReturn.ViewModelBuilder.Details") .RegisterType, ViewModelBuilders.EReturn.EditViewModelBuilder>("EReturn.ViewModelBuilder.Edit") .RegisterType, Commands.EReturn.EditCommand>("EReturn.Command.Edit") .RegisterType, Commands.EReturn.ApproverEditCommand>("EReturn.Command.ApproverEdit") .RegisterType, Commands.EReturn.CreateCommand>() .RegisterType, Commands.EReturn.DeleteCommand>("EReturn.Command.Delete") .RegisterType, Commands.EReturn.SubmitCommand>("EReturn.Command.Submit") .RegisterType, Commands.EReturn.ApproveCommand>() .RegisterType, ViewModelBuilders.EReturnNote.ListViewModelBuilder>() .RegisterType, Commands.EReturnNote.CreateCommand>() .RegisterType, ViewModelBuilders.EReturnTemplate.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.EReturnTemplate.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.EReturnTemplate.ListViewModelBuilder>() .RegisterType, Commands.EReturnTemplate.CreateCommand>("Create") .RegisterType, Commands.EReturnTemplate.EditCommand>("Edit") .RegisterType, ViewModelBuilders.EReturnTemplateRow.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.EReturnTemplateRow.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.EReturnTemplateRow.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.EReturnTemplateRow.ListViewModelBuilder>() .RegisterType, Commands.EReturnTemplateRow.CreateCommand>("Create") .RegisterType, Commands.EReturnTemplateRow.EditCommand>("Edit") .RegisterType, Commands.EReturnTemplateRow.DeleteCommand>("EReturnTemplateRow.Command.Delete") .RegisterType, ViewModelBuilders.Fund.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.Fund.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.Fund.ListViewModelBuilder>() .RegisterType, Commands.Fund.CreateCommand>("Create") .RegisterType, Commands.Fund.EditCommand>("Edit") .RegisterType, ViewModelBuilders.FundMetadata.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMetadata.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMetadata.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMetadata.ListViewModelBuilder>() .RegisterType, Commands.FundMetadata.CreateCommand>("Create") .RegisterType, Commands.FundMetadata.EditCommand>("Edit") .RegisterType, Commands.FundMetadata.DeleteCommand>("FundMetadata.Command.Delete") .RegisterType, ViewModelBuilders.FundMessage.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMessage.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMessage.ListViewModelBuilder>() .RegisterType, Commands.FundMessage.CreateCommand>("Create") .RegisterType, Commands.FundMessage.EditCommand>("Edit") .RegisterType, ViewModelBuilders.FundMessageMetadata.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMessageMetadata.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMessageMetadata.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.FundMessageMetadata.ListViewModelBuilder>() .RegisterType, Commands.FundMessageMetadata.CreateCommand>("Create") .RegisterType, Commands.FundMessageMetadata.EditCommand>("Edit") .RegisterType, Commands.FundMessageMetadata.DeleteCommand>("FundMessageMetadata.Command.Delete") .RegisterType, string>, ViewModelBuilders.Home.ListViewModelBuilder>() .RegisterType, ViewModelBuilders.MethodOfPayment.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.MethodOfPayment.EditViewModelBuilder>() .RegisterType, string>, ViewModelBuilders.MethodOfPayment.ListViewModelBuilder>() .RegisterType, Commands.MethodOfPayment.CreateCommand>("Create") .RegisterType, Commands.MethodOfPayment.EditCommand>("Edit") .RegisterType, ViewModelBuilders.MethodOfPaymentMetadata.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.MethodOfPaymentMetadata.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.MethodOfPaymentMetadata.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.MethodOfPaymentMetadata.ListViewModelBuilder>() .RegisterType, Commands.MethodOfPaymentMetadata.CreateCommand>("Create") .RegisterType, Commands.MethodOfPaymentMetadata.EditCommand>("Edit") .RegisterType, Commands.MethodOfPaymentMetadata.DeleteCommand>("MethodOfPaymentMetadata.Command.Delete") .RegisterType, ViewModelBuilders.Payment.IndexViewModelBuilder>() .RegisterType, Commands.Payment.AddCommand>("Add") .RegisterType, Commands.Payment.RemoveCommand>("Remove") .RegisterType, Commands.Payment.EmptyBasketCommand>("EmptyBasket") .RegisterType, Commands.Payment.CheckAddressCommand>("CheckAddress") .RegisterType, Commands.Payment.CreatePaymentsCommand>("CreatePayments") .RegisterType, Commands.Payment.SetAddressCommand>("SetAddress") .RegisterType, Commands.Payment.ProcessPaymentCommand>() .RegisterType, ViewModelBuilders.Role.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.Role.EditViewModelBuilder>() .RegisterType, int>, ViewModelBuilders.Role.ListViewModelBuilder>() .RegisterType, Commands.Role.EditCommand>() .RegisterType, ViewModelBuilders.Suspense.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.Suspense.ListViewModelBuilder>() .RegisterType, ViewModelBuilders.Suspense.JournalViewModelBuilder>() .RegisterType, Commands.Suspense.JournalCommand>() .RegisterType, Commands.Suspense.SaveNoteCommand>() .RegisterType, ViewModelBuilders.SuspenseNote.ListViewModelBuilder>() .RegisterType, Commands.SuspenseNote.CreateCommand>() .RegisterType, ViewModelBuilders.SystemMessage.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.SystemMessage.EditViewModelBuilder>() .RegisterType, int>, ViewModelBuilders.SystemMessage.ListViewModelBuilder>() .RegisterType, Commands.SystemMessage.CreateCommand>("Create") .RegisterType, Commands.SystemMessage.EditCommand>("Edit") .RegisterType, ViewModelBuilders.Transaction.ListViewModelBuilder>() .RegisterType, ViewModelBuilders.Transaction.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.Transaction.TransferViewModelBuilder>() .RegisterType, ViewModelBuilders.Transaction.RefundViewModelBuilder>() .RegisterType, Commands.Transaction.TransferCommand>() .RegisterType, Commands.Transaction.UndoTransferCommand>("UndoTransfer") .RegisterType, Commands.Transaction.RefundCommand>() .RegisterType, Commands.Transaction.EmailReceiptCommand>() .RegisterType, Commands.Transaction.CreateCsvFileForExportCommand>() .RegisterType, ViewModelBuilders.Transfer.TransferViewModelBuilder>() .RegisterType, Commands.Transfer.TransferCommand>() .RegisterType, Commands.Validation.ValidateTransferItemCommand>() .RegisterType, ViewModelBuilders.User.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.User.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.User.ListViewModelBuilder>() .RegisterType, Commands.User.CreateCommand>("Create") .RegisterType, Commands.User.EditCommand>("Edit") .RegisterType, ViewModelBuilders.UserRole.BasicListViewModelBuilder>("UserRole.ViewModelBuider.BasicList") .RegisterType, ViewModelBuilders.UserRole.EditViewModelBuilder>() .RegisterType, Commands.UserRole.EditCommand>() .RegisterType, ViewModelBuilders.UserFundGroup.BasicListViewModelBuilder>("UserFundGroup.ViewModelBuider.BasicList") .RegisterType, ViewModelBuilders.UserFundGroup.EditViewModelBuilder>() .RegisterType, Commands.UserFundGroup.EditCommand>() .RegisterType, ViewModelBuilders.UserTemplate.BasicListViewModelBuilder>("UserTemplate.ViewModelBuider.BasicList") .RegisterType, ViewModelBuilders.UserTemplate.EditViewModelBuilder>() .RegisterType, Commands.UserTemplate.EditCommand>() .RegisterType, ViewModelBuilders.UserMethodOfPayment.BasicListViewModelBuilder>("UserMethodOfPayment.ViewModelBuider.BasicList") .RegisterType, ViewModelBuilders.UserMethodOfPayment.EditViewModelBuilder>() .RegisterType, Commands.UserMethodOfPayment.EditCommand>() .RegisterType, ViewModelBuilders.Vat.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.Vat.EditViewModelBuilder>() .RegisterType, string>, ViewModelBuilders.Vat.ListViewModelBuilder>() .RegisterType, Commands.Vat.CreateCommand>("Create") .RegisterType, Commands.Vat.EditCommand>("Edit") .RegisterType, ViewModelBuilders.VatMetadata.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.VatMetadata.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.VatMetadata.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.VatMetadata.ListViewModelBuilder>() .RegisterType, Commands.VatMetadata.CreateCommand>("Create") .RegisterType, Commands.VatMetadata.EditCommand>("Edit") .RegisterType, Commands.VatMetadata.DeleteCommand>("VatMetadata.Command.Delete") .RegisterType, ViewModelBuilders.Office.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.Office.EditViewModelBuilder>() .RegisterType, string>, ViewModelBuilders.Office.ListViewModelBuilder>() .RegisterType, Commands.Office.CreateCommand>("Create") .RegisterType, Commands.Office.EditCommand>("Edit") .RegisterType, ViewModelBuilders.ImportProcessingRule.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRule.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRule.ListViewModelBuilder>() .RegisterType, Commands.ImportProcessingRule.CreateCommand>("Create") .RegisterType, Commands.ImportProcessingRule.EditCommand>("Edit") .RegisterType, Commands.ImportProcessingRule.ChangeStatusCommand>() .RegisterType, ViewModelBuilders.ImportProcessingRuleCondition.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRuleCondition.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRuleCondition.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRuleCondition.ListViewModelBuilder>() .RegisterType, Commands.ImportProcessingRuleCondition.CreateCommand>("Create") .RegisterType, Commands.ImportProcessingRuleCondition.EditCommand>("Edit") .RegisterType, Commands.ImportProcessingRuleCondition.DeleteCommand>("ImportProcessingRuleCondition.Command.Delete") .RegisterType, ViewModelBuilders.ImportProcessingRuleAction.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRuleAction.CreateViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRuleAction.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRuleAction.ListViewModelBuilder>() .RegisterType, Commands.ImportProcessingRuleAction.CreateCommand>("Create") .RegisterType, Commands.ImportProcessingRuleAction.EditCommand>("Edit") .RegisterType, Commands.ImportProcessingRuleAction.DeleteCommand>("ImportProcessingRuleAction.Command.Delete") .RegisterType, Commands.FileImport.SaveCommand>() .RegisterType, Commands.FileImport.ProcessCommand>("FileImport.Command.Process") .RegisterType, ViewModelBuilders.PaymentIntegration.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.PaymentIntegration.EditViewModelBuilder>() .RegisterType, int>, ViewModelBuilders.PaymentIntegration.ListViewModelBuilder>() .RegisterType, Commands.PaymentIntegration.CreateCommand>("Create") .RegisterType, Commands.PaymentIntegration.EditCommand>("Edit") .RegisterType, ViewModelBuilders.CheckDigitConfiguration.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.CheckDigitConfiguration.EditViewModelBuilder>("Create") .RegisterType, ViewModelBuilders.CheckDigitConfiguration.EditViewModelBuilder>("Edit") .RegisterType, ViewModelBuilders.CheckDigitConfiguration.ListViewModelBuilder>() .RegisterType, Commands.CheckDigitConfiguration.CreateCommand>("Create") .RegisterType, Commands.CheckDigitConfiguration.EditCommand>("Edit") .RegisterType, Commands.CheckDigitConfiguration.DeleteCommand>("CheckDigitConfiguration.Command.Delete") .RegisterType, ViewModelBuilders.AccountReferenceValidator.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.AccountReferenceValidator.EditViewModelBuilder>("Create") .RegisterType, ViewModelBuilders.AccountReferenceValidator.EditViewModelBuilder>("Edit") .RegisterType, ViewModelBuilders.AccountReferenceValidator.ListViewModelBuilder>() .RegisterType, Commands.AccountReferenceValidator.CreateCommand>("Create") .RegisterType, Commands.AccountReferenceValidator.EditCommand>("Edit") .RegisterType, Commands.AccountReferenceValidator.DeleteCommand>("AccountReferenceValidator.Command.Delete") .RegisterType, ViewModelBuilders.ImportType.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportType.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportType.ListViewModelBuilder>() .RegisterType, Commands.ImportType.CreateCommand>("Create") .RegisterType, Commands.ImportType.EditCommand>("Edit") .RegisterType, ViewModelBuilders.ImportTypeImportProcessingRule.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportTypeImportProcessingRule.CreateViewModelBuilder>("Create") .RegisterType, ViewModelBuilders.ImportTypeImportProcessingRule.EditViewModelBuilder>("Edit") .RegisterType, ViewModelBuilders.ImportTypeImportProcessingRule.ListViewModelBuilder>() .RegisterType, Commands.ImportTypeImportProcessingRule.CreateCommand>("Create") .RegisterType, Commands.ImportTypeImportProcessingRule.EditCommand>("Edit") .RegisterType, Commands.ImportTypeImportProcessingRule.DeleteCommand>("ImportTypeImportProcessingRule.Command.Delete") .RegisterType, ViewModelBuilders.ImportProcessingRuleImportType.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.ImportProcessingRuleImportType.CreateViewModelBuilder>("Create") .RegisterType, ViewModelBuilders.ImportProcessingRuleImportType.EditViewModelBuilder>("Edit") .RegisterType, ViewModelBuilders.ImportProcessingRuleImportType.ListViewModelBuilder>() .RegisterType, Commands.ImportProcessingRuleImportType.CreateCommand>("Create") .RegisterType, Commands.ImportProcessingRuleImportType.EditCommand>("Edit") .RegisterType, Commands.ImportProcessingRuleImportType.DeleteCommand>("ImportProcessingRuleImportType.Command.Delete") .RegisterType, ViewModelBuilders.Import.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.Import.ListViewModelBuilder>() .RegisterType, ViewModelBuilders.MetadataKey.DetailsViewModelBuilder>() .RegisterType, ViewModelBuilders.MetadataKey.EditViewModelBuilder>() .RegisterType, ViewModelBuilders.MetadataKey.ListViewModelBuilder>() .RegisterType, Commands.MetadataKey.CreateCommand>("Create") .RegisterType, Commands.MetadataKey.EditCommand>("Edit") .RegisterType, Commands.MetadataKey.DeleteCommand>("MetadataKey.Command.Delete") ; } private static void RegisterControllerDependencies(IUnityContainer container) { container .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType() .RegisterType(); } private static void RegisterOther(IUnityContainer container) { container.RegisterType(); container.RegisterType(); } } }