SC.UI

IController

using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.Unity;

namespace SC.UI
{
    public interface IController : ISingletonDependency
    {
        void SubscribeEvents();

        void UnsubscribeEvents();

        IUnityContainer UnityContainer { get; set; }

        IRegionManager RegionManager { get; set; }

        IEventAggregator EventAggregator { get; set; }

        void AttachView(IViewModel viewModel);

        void RemoveView(IViewModel viewModel);

        void AttachView(string zoneName, IViewModel viewModel);

        void RemoveView(string zoneName, IViewModel viewModel);
    }
}

Controller

using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.Unity;

namespace SC.UI
{
    public abstract class Controller : NotificationObject, IController
    {
        public Controller(
            IRegionManager regionManager,
            IEventAggregator eventAggregator,
            IUnityContainer unityContainer)
        {
            RegionManager = regionManager;
            EventAggregator = eventAggregator;
            UnityContainer = unityContainer;
        }

        public IUnityContainer UnityContainer { get; set; }

        public IRegionManager RegionManager { get; set; }

        public IEventAggregator EventAggregator { get; set; }

        public virtual void SubscribeEvents() { }

        public virtual void UnsubscribeEvents() { }

        public void AttachView(IViewModel viewModel)
        {
            AttachView(RegionNames.MainRegion, viewModel);
        }

        public void AttachView(string regionName, IViewModel viewModel)
        {
            var zone = RegionManager.Regions[regionName];

            if (null != zone && !zone.Views.Contains(viewModel))
            {
                zone.Add(viewModel);
            }
        }

        public void RemoveView(IViewModel viewModel)
        {
            RemoveView(RegionNames.MainRegion, viewModel);
        }

        public void RemoveView(string regionName, IViewModel viewModel)
        {
            var region = RegionManager.Regions[regionName];

            if (null != region && region.Views.Contains(viewModel))
            {
                region.Remove(viewModel);
            }
        }
    }
}

ModuleBase

using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.Modularity;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.Unity;

namespace SC.UI
{
    public class ModuleBase : IModule
    {
        protected IUnityContainer UnityContainer { get; private set; }
        protected IEventAggregator EventAggregator { get; private set; }
        protected IRegionManager RegionManager { get; private set; }

        public ModuleBase(
            IUnityContainer unityContainer,
            IEventAggregator eventAggregator,
            IRegionManager regionManager)
        {
            UnityContainer = unityContainer;
            EventAggregator = eventAggregator;
            RegionManager = regionManager;
        }

        public void Initialize()
        {
            ConfigureContainer();
            InitializeModule();
            SubscribeEvents();
        }

        protected virtual void ConfigureContainer() { }

        protected virtual void InitializeModule() { }

        protected virtual void SubscribeEvents() { }

        protected virtual void UnSubscribeEvents() { }
    }
}

IViewModel

using System.ComponentModel;

namespace SC.UI
{
    public interface IViewModel : INotifyPropertyChanged, ISingletonDependency
    {

    }
}

ViewModelBase

namespace SC.UI
{
    public class ViewModelBase : NotificationObject, IViewModel
    {
        public ViewModelBase()
        {

        }
    }
}

ISingletonDependency

namespace SC.UI
{
    public interface ISingletonDependency
    {
    }
}

http://files.cnblogs.com/files/zisezhixin/SC.UI.zip

时间: 2024-10-17 15:48:24

SC.UI的相关文章

Cocos2d-x 3.0final 终结者系列教程23CocosStudio UI组件使用大全Cocos2d-x3.2使用

最近忙死了,得空发表一篇关于所有的Cocostudio中的UI组件使用的教程,其实是对所有UI组件的Api介绍,作为手册收藏下吧!! CocosStudio UI组件 按钮UIButton 复选框UICheckBox 滑块UISlider 图片UIImageView 进度条UILoadingBar 纹理文本 UITextAtlas 字体文本 UIText 图片字体文本 UITextBMFont 文本区域 UITextField 布局组件 UILayout 滚动组件 UIScrollView 页面

【Spark Core】任务运行机制和Task源代码浅析1

引言 上一小节<TaskScheduler源代码与任务提交原理浅析2>介绍了Driver側将Stage进行划分.依据Executor闲置情况分发任务,终于通过DriverActor向executorActor发送任务消息. 我们要了解Executor的运行机制首先要了解Executor在Driver側的注冊过程.这篇文章先了解一下Application和Executor的注冊过程. 1. Task类及其相关 1.1 Task类 Spark将由Executor运行的Task分为ShuffleMa

Spark里面的任务调度:离SparkContext开始

SparkContext这是发达国家Spark入学申请,它负责的相互作用和整个集群,它涉及到创建RDD.accumulators and broadcast variables.理解力Spark架构,我们需要从入口开始.下图是图的官方网站. DriverProgram就是用户提交的程序,这里边定义了SparkContext的实例. SparkContext定义在core/src/main/scala/org/apache/spark/SparkContext.scala. Spark默认的构造函

spark core源码分析6 Spark job的提交

本节主要讲解SparkContext的逻辑 首先看一个spark自带的最简单的例子: object SparkPi { def main(args: Array[String]) { val conf = new SparkConf().setAppName("Spark Pi") val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = ma

【Spark Core】任务执行机制和Task源码浅析1

引言 上一小节<TaskScheduler源码与任务提交原理浅析2>介绍了Driver侧将Stage进行划分,根据Executor闲置情况分发任务,最终通过DriverActor向executorActor发送任务消息. 我们要了解Executor的执行机制首先要了解Executor在Driver侧的注册过程,这篇文章先了解一下Application和Executor的注册过程. 1. Task类及其相关 1.1 Task类 Spark将由Executor执行的Task分为ShuffleMap

Spark技术内幕之任务调度:从SparkContext开始

SparkContext是开发Spark应用的入口,它负责和整个集群的交互,包括创建RDD,accumulators and broadcast variables.理解Spark的架构,需要从这个入口开始.下图是官网的架构图. DriverProgram就是用户提交的程序,这里边定义了SparkContext的实例.SparkContext定义在core/src/main/scala/org/apache/spark/SparkContext.scala. Spark默认的构造函数接受org.

Spark源码系列(四)图解作业生命周期

这一章我们探索了Spark作业的运行过程,但是没把整个过程描绘出来,好,跟着我走吧,let you know! 我们先回顾一下这个图,Driver Program是我们写的那个程序,它的核心是SparkContext,回想一下,从api的使用角度,RDD都必须通过它来获得. 下面讲一讲它所不为认知的一面,它和其它组件是如何交互的. Driver向Master注册Application过程 SparkContext实例化之后,在内部实例化两个很重要的类,DAGScheduler和TaskSched

spark源码分析之Executor启动与任务提交篇

任务提交流程 概述 在阐明了Spark的Master的启动流程与Worker启动流程.接下继续执行的就是Worker上的Executor进程了,本文继续分析整个Executor的启动与任务提交流程 Spark-submit 提交一个任务到集群通过的是Spark-submit 通过启动脚本的方式启动它的主类,这里以WordCount为例子 spark-submit --class cn.itcast.spark.WordCount bin/spark-clas -> org.apache.spar

Spark技术内幕:Executor分配详解

当用户应用new SparkContext后,集群就会为在Worker上分配executor,那么这个过程是什么呢?本文以Standalone的Cluster为例,详细的阐述这个过程.序列图如下: 1. SparkContext创建TaskScheduler和DAG Scheduler SparkContext是用户应用和Spark集群的交换的主要接口,用户应用一般首先要创建它.如果你使用SparkShell,你不必自己显式去创建它,系统会自动创建一个名字为sc的SparkContext的实例.