/// <summary>Integrates Unity when the application starts.</summary> public static void Start() { var container = ContainerManager.GetConfiguredContainer(); UnityConfig.RegisterTypes(container); FilterProviders.Providers.Remove(FilterProviders.Providers.OfType <FilterAttributeFilterProvider>().First()); FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); //http://stackoverflow.com/questions/699852/how-to-find-all-the-classes-which-implement-a-given-interface foreach (var assembly in assemblies) { var instances = from t in assembly.GetTypes() where t.GetInterfaces().Contains(typeof(IDependencyRegister)) && t.GetConstructor(Type.EmptyTypes) != null select Activator.CreateInstance(t) as IDependencyRegister; foreach (var instance in instances.OrderBy(x => x.Order)) { instance.Register(container); } } // TODO: Uncomment if you want to use PerRequestLifetimeManager // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); }
public async Task <ActionResult> OrderAction(int id, int status) { var order = await _orderService.FindAsync(id); if (order == null) { return(new HttpNotFoundResult()); } var descriptor = _pluginFinder.GetPluginDescriptorBySystemName <IHookPlugin>(order.PaymentPlugin); if (descriptor == null) { return(new HttpNotFoundResult("Not found")); } var controllerType = descriptor.Instance <IHookPlugin>().GetControllerType(); var controller = ContainerManager.GetConfiguredContainer().Resolve(controllerType) as IPaymentController; string message = string.Empty; var orderResult = controller.OrderAction(id, status, out message); var result = new { Success = orderResult, Message = message }; return(Json(result, JsonRequestBehavior.AllowGet)); }
/// <summary>Integrates Unity when the application starts.</summary> public static void Start() { var container = ContainerManager.GetConfiguredContainer(); UnityConfig.RegisterTypes(container); FilterProviders.Providers.Remove(FilterProviders.Providers.OfType <FilterAttributeFilterProvider>().First()); FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); try { //http://stackoverflow.com/questions/699852/how-to-find-all-the-classes-which-implement-a-given-interface foreach (var assembly in assemblies) { var instances = from t in assembly.GetTypes() where t.GetInterfaces().Contains(typeof(IDependencyRegister)) && t.GetConstructor(Type.EmptyTypes) != null select Activator.CreateInstance(t) as IDependencyRegister; foreach (var instance in instances.OrderBy(x => x.Order)) { instance.Register(container); } } } catch (ReflectionTypeLoadException ex) { http: //stackoverflow.com/questions/1091853/error-message-unable-to-load-one-or-more-of-the-requested-types-retrieve-the-l System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (Exception exSub in ex.LoaderExceptions) { sb.AppendLine(exSub.Message); System.IO.FileNotFoundException exFileNotFound = exSub as System.IO.FileNotFoundException; if (exFileNotFound != null) { if (!string.IsNullOrEmpty(exFileNotFound.FusionLog)) { sb.AppendLine("Fusion Log:"); sb.AppendLine(exFileNotFound.FusionLog); } } sb.AppendLine(); } string errorMessage = sb.ToString(); throw new Exception(errorMessage, ex); //Display or log the error based on your application. } // TODO: Uncomment if you want to use PerRequestLifetimeManager // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); }
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); var container = ContainerManager.GetConfiguredContainer(); UnityOfWork.RegisterTypes(container); }
/// <summary> /// Resolve only after application start up /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public virtual T Instance <T>() where T : class, IPlugin { object instance = ContainerManager.GetConfiguredContainer().Resolve(PluginType); // Might resolve unregistered... var typedInstance = instance as T; if (typedInstance != null) { typedInstance.PluginDescriptor = this; } return(typedInstance); }
public ActionResult Index() { var model = CacheHelper.Statistics; model.TransactionCount = 0; // Get transaction count var descriptors = _pluginFinder.GetPluginDescriptors(LoadPluginsMode.InstalledOnly, "Payment"); foreach (var descriptor in descriptors) { var controllerType = descriptor.Instance <IHookPlugin>().GetControllerType(); var controller = ContainerManager.GetConfiguredContainer().Resolve(controllerType) as IPaymentController; model.TransactionCount += controller.GetTransactionCount(); } return(View("Dashboard", model)); }
public async Task <ActionResult> OrderAction(int id, int status) { var orderQuery = await _orderService.Query(x => x.ID == id).Include(x => x.Listing).SelectAsync(); var order = orderQuery.FirstOrDefault(); if (order == null) { return(new HttpNotFoundResult()); } var currentUserId = User.Identity.GetUserId(); // Unauthorized access if (order.UserProvider != currentUserId && order.UserReceiver != currentUserId) { return(new HttpUnauthorizedResult()); } var descriptor = _pluginFinder.GetPluginDescriptorBySystemName <IHookPlugin>(order.PaymentPlugin); if (descriptor == null) { return(new HttpNotFoundResult("Not found")); } var controllerType = descriptor.Instance <IHookPlugin>().GetControllerType(); var controller = ContainerManager.GetConfiguredContainer().Resolve(controllerType) as IPaymentController; string message = string.Empty; var orderResult = controller.OrderAction(id, status, out message); var orderStatus = (Enum_OrderStatus)status; var orderStatusText = string.Empty; switch (orderStatus) { case Enum_OrderStatus.Created: case Enum_OrderStatus.Pending: orderStatusText = "[[[Pending]]]"; break; case Enum_OrderStatus.Confirmed: orderStatusText = "[[[Confirmed]]]"; break; case Enum_OrderStatus.Cancelled: orderStatusText = "[[[Cancelled]]]"; break; default: orderStatusText = orderStatus.ToString(); break; } var result = new { Success = orderResult, Message = message }; if (orderResult) { // Send message to the user var messageSend = new MessageSendModel() { UserFrom = currentUserId, UserTo = order.UserProvider == currentUserId ? order.UserReceiver : order.UserProvider, ListingID = order.ListingID, Subject = order.Listing.Title, Body = HttpContext.ParseAndTranslate(string.Format( "[[[Order %0 - %1 - Total Price %2 %3. <a href=\"%4\">See Details</a>|||{0}|||{1}|||{2}|||{3}|||{4}]]]", HttpContext.ParseAndTranslate(orderStatusText), HttpContext.ParseAndTranslate(order.Description), order.Price, order.Currency, Url.Action("Orders"))) }; await MessageHelper.SendMessage(messageSend); } TempData[TempDataKeys.UserMessage] = string.Format("[[[The order is %0.|||{0}]]]", orderStatus); return(Json(result, JsonRequestBehavior.AllowGet)); }
/// <summary>Disposes the Unity container when the application is shut down.</summary> public static void Shutdown() { var container = ContainerManager.GetConfiguredContainer(); container.Dispose(); }
public async Task <ActionResult> Order(Order order) { var listing = await _listingService.FindAsync(order.ListingID); if (listing == null) { return(new HttpNotFoundResult()); } var userCurrent = User.Identity.User(); // Check if payment method is setup on user or the platform var descriptors = _pluginFinder.GetPluginDescriptors <IHookPlugin>(LoadPluginsMode.InstalledOnly, "Payment").Where(x => x.Enabled); if (descriptors.Count() == 0) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = "[[[The provider has not setup the payment option yet, please contact the provider.]]]"; return(RedirectToAction("Listing", "Listing", new { id = order.ListingID })); } foreach (var descriptor in descriptors) { var controllerType = descriptor.Instance <IHookPlugin>().GetControllerType(); var controller = ContainerManager.GetConfiguredContainer().Resolve(controllerType) as IPaymentController; if (!controller.HasPaymentMethod(listing.UserID)) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = string.Format("[[[The provider has not setup the payment option for {0} yet, please contact the provider.]]]", descriptor.FriendlyName); return(RedirectToAction("Listing", "Listing", new { id = order.ListingID })); } } if (order.ID == 0) { order.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added; order.Created = DateTime.Now; order.Modified = DateTime.Now; order.Status = (int)Enum_OrderStatus.Created; order.UserProvider = listing.UserID; order.UserReceiver = userCurrent.Id; order.ListingTypeID = order.ListingTypeID; order.Currency = listing.Currency; if (order.UserProvider == order.UserReceiver) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = "[[[You cannot book the item from yourself!]]]"; return(RedirectToAction("Listing", "Listing", new { id = order.ListingID })); } if (order.ToDate.HasValue && order.FromDate.HasValue) { order.Description = HttpContext.ParseAndTranslate( string.Format("{0} #{1} ([[[From]]] {2} [[[To]]] {3})", listing.Title, listing.ID, order.FromDate.Value.ToShortDateString(), order.ToDate.Value.ToShortDateString())); order.Quantity = order.ToDate.Value.Date.AddDays(1).Subtract(order.FromDate.Value.Date).Days; order.Price = order.Quantity * listing.Price; } else if (order.Quantity.HasValue) { order.Description = string.Format("{0} #{1}", listing.Title, listing.ID); order.Quantity = order.Quantity.Value; order.Price = listing.Price; } else { // Default order.Description = string.Format("{0} #{1}", listing.Title, listing.ID); order.Quantity = 1; order.Price = listing.Price; } _orderService.Insert(order); } await _unitOfWorkAsync.SaveChangesAsync(); ClearCache(); return(RedirectToAction("Payment", new { id = order.ID })); }
/// <summary> /// Send Message /// </summary> /// <param name="userFrom"></param> /// <param name="userTo"></param> /// <param name="subject"></param> /// <param name="body"></param> /// <returns></returns> public static async Task SendMessage(MessageSendModel messageModel) { var unitOfWork = ContainerManager.GetConfiguredContainer().Resolve <IUnitOfWorkAsync>(); MessageThread messageThread; // Use message subject to find the message thread if no listing id is provided if (!messageModel.ListingID.HasValue) { var messageThreadQuery = await MessageThreadService .Query(x => x.Subject.Equals(messageModel.Subject, StringComparison.InvariantCultureIgnoreCase) && x.MessageParticipants.Any(y => y.UserID == messageModel.UserFrom) && x.MessageParticipants.Any(y => y.UserID == messageModel.UserTo)) .SelectAsync(); messageThread = messageThreadQuery.FirstOrDefault(); } else { // Otherwise, use listing ID var messageThreadQuery = await MessageThreadService .Query(x => x.ListingID == messageModel.ListingID) .SelectAsync(); messageThread = messageThreadQuery.FirstOrDefault(); } // Create message thread if there is not one yet. if (messageThread == null) { messageThread = new MessageThread() { Subject = messageModel.Subject, ListingID = messageModel.ListingID, Created = DateTime.Now, LastUpdated = DateTime.Now, ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added }; MessageThreadService.Insert(messageThread); await UnitOfWorkAsync.SaveChangesAsync(); // Add message participants MessageParticipantService.Insert(new MessageParticipant() { UserID = messageModel.UserFrom, MessageThreadID = messageThread.ID, ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added }); MessageParticipantService.Insert(new MessageParticipant() { UserID = messageModel.UserTo, MessageThreadID = messageThread.ID, ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added }); } // Insert mail message to db var message = new Message() { UserFrom = messageModel.UserFrom, Body = messageModel.Body, MessageThreadID = messageThread.ID, Created = DateTime.Now, LastUpdated = DateTime.Now, ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added }; MessageService.Insert(message); await UnitOfWorkAsync.SaveChangesAsync(); // Add read state of messages MessageReadStateService.Insert(new MessageReadState() { MessageID = message.ID, UserID = messageModel.UserFrom, ReadDate = DateTime.Now, ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added }); MessageReadStateService.Insert(new MessageReadState() { MessageID = message.ID, UserID = messageModel.UserTo, ReadDate = null, ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added }); await UnitOfWorkAsync.SaveChangesAsync(); }