Exemplo n.º 1
0
 public ApplePhone(IHeadphone headphone, IMicrophone microphone, IPower power)
 {
     this.iHeadphone  = headphone;
     this.iMicrophone = microphone;
     this.iPower      = power;
     Console.WriteLine("{0}带参数构造函数", this.GetType().Name);
 }
Exemplo n.º 2
0
 //默认构造参数最多的函数
 public AndroidPhone(IBaseBll iBLL, IPower iPower, IHeadphone iHeadphone, IMicrophone iMicrophone)
 {
     this.iBLL        = iBLL;
     this.iPower      = iPower;
     this.iHeadphone  = iHeadphone;
     this.iMicrophone = iMicrophone;
     Console.WriteLine("{0}构造函数", this.GetType().Name);
 }
Exemplo n.º 3
0
        //构造函数注入
        public ApplePhone(IMicrophone microphone)
        {
            Microphone = microphone;
            WriteLineWithColor($"构造函数注入{microphone.GetType().Name}类型");

            Id = Guid.NewGuid().ToString();
            Console.WriteLine($"ApplePhone 被构造,Id:{Id}");
        }
Exemplo n.º 4
0
 public Mobile(IScreen screen, IBattery battery, IKeyboard keyboard, IMicrophone microphone, ISpeaker speaker, ISimCard simCard)
 {
     this.Screen     = screen;
     this.Battery    = battery;
     this.Keyboard   = keyboard;
     this.Microphone = microphone;
     this.Speaker    = speaker;
     this.SimCard    = simCard;
 }
Exemplo n.º 5
0
        protected void Start()
        {
            encoder = new Encoder();
            if (UnityEngine.Application.platform == RuntimePlatform.WindowsEditor || UnityEngine.Application.platform == RuntimePlatform.WindowsPlayer)
            {
                micInput = new MicrophoneInputNative();
            }
            else
            {
                micInput = new MicrophoneInput();
            }

            enableMicRecording = true;
        }
Exemplo n.º 6
0
 public AudioReaderAndSender(IMicrophone microphone,
                             IDataTransmitter transmitter,
                             IDataAsByteConverter <DataModel> converter,
                             DataCompressor compressor,
                             LocalToneController localToneController,
                             RadioSettings settings,
                             INetworkTaskManager networkTaskManager)
 {
     _senderId   = settings.NetworkToken;
     _microphone = microphone;
     _microphone.OnDataAvailable += OnSendDataAvailable;
     _transmitter         = transmitter;
     _converter           = converter;
     _compressor          = compressor;
     _localToneController = localToneController;
     _networkTaskManager  = networkTaskManager;
 }
        public void InitMic(string device, IMicrophone micPhone)
        {
            if (micPhone != null)
            {
                this._micPhone = micPhone;
            }

            if (device == null)
            {
                device = this._micPhone.GetDevices()[0];
            }

            CancelInput();

            lock (self_locker) {
                this._device = device;
            }
        }
Exemplo n.º 8
0
        public void Init(string lang, string device, IMicrophone micPhone)
        {
            position    = 0;
            isRecording = false;
            this.lang   = lang;
#if RTM_BUILD_NO_AUDIO
            throw new Exception("Audio is disabled, please remove the RTM_BUILD_NO_AUDIO define in \"Scripting Define Symbols\"");
#else
            if (micPhone != null)
            {
                this.micPhone = micPhone;
            }

            lock (selfLocker) {
                this.device = device;
            }
#endif
        }
Exemplo n.º 9
0
        public void Init(string lang, string device, IMicrophone micPhone)
        {
            this.lang = lang;
            if (micPhone != null)
            {
                this.micPhone = micPhone;
            }

            if (Microphone.devices.Length == 0)
            {
                return;
            }

            if (device == null)
            {
                device = Microphone.devices[0];
            }

            lock (selfLocker) {
                this.device = device;
            }
        }
Exemplo n.º 10
0
 public Power(IMicrophone microphone)
 {
     Console.WriteLine($"{this.GetType().Name} 被构造。。。");
 }
Exemplo n.º 11
0
 public ApplePhone(IMicrophone microphone)
 {
     Microphone = microphone;
     WriteLineWithColor($"构造函数注入{microphone.GetType().Name}类型");
 }
Exemplo n.º 12
0
 public void Init(IHeadphone headphone, IMicrophone microphone, IPower power)
 {
     this.iHeadphone  = headphone;
     this.iMicrophone = microphone;
     this.iPower      = power;
 }
Exemplo n.º 13
0
 public Headphone(IMicrophone microphone)
 {
     Console.WriteLine("Headphone 被构造");
 }
Exemplo n.º 14
0
        static void Main(string[] args)
        {
            //IServicePhone service = new ServicePhone();

            //Mi mi = new Mi();

            //service.PlayAbstract(mi);

            //Vivo vivo = new Vivo();

            //service.PlayAbstract(vivo);



            try
            {
                //IServicePhone servicePhone = SimpleFactory.CreateService();

                //AbstractPhone abstractPhone = SimpleFactory.CreateAbstractPhone();

                //servicePhone.PlayAbstract(abstractPhone);

                //构建AndroidPhone
                //{
                //    IUnityContainer container = new UnityContainer();
                //    container.RegisterType<IPhone, AndroidPhone>();

                //    IPhone phone = container.Resolve<IPhone>();
                //}

                ////构建
                //{

                //    IUnityContainer container = new UnityContainer();
                //    container.RegisterType<IPhone, ApplePhone>();
                //    container.RegisterType<IHeadphone, Headphone>();
                //    container.RegisterType<IPower, Power>();
                //    container.RegisterType<IMicrophone, Microphone>();


                //    IPhone phone = container.Resolve<IPhone>();
                //}

                //{
                //    //IOC使用时,全局只需要一个容器就够了  -------全局静态
                //    //一个抽象 多个实例 使用别名
                //    IUnityContainer container = new UnityContainer();
                //    container.RegisterType<IPhone, ApplePhone>("applephone");
                //    container.RegisterType<IPhone, AndroidPhone>("androidphone");
                //    container.RegisterType<IHeadphone, Headphone>();
                //    container.RegisterType<IPower, Power>();
                //    container.RegisterType<IMicrophone, Microphone>();

                //    IPhone phone1 = container.Resolve<IPhone>("applephone");
                //    IPhone phone2 = container.Resolve<IPhone>("androidphone");
                //}

                //使用配置文件注册
                {
                    //IUnityContainer container = new UnityContainer();

                    ////读取配置文件
                    //ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();

                    //filemap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Unity.config.xml");//找的配置文件路径

                    //Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);

                    //UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);

                    //section.Configure(container, "testContainer");

                    //IPhone phone1 = container.Resolve<IPhone>("applephone");
                }

                //自定义IOC容器
                //{
                //    IContainer container = new Container();

                //    container.RegisterType<IPhone, ApplePhone>();
                //    container.RegisterType<IMicrophone, Microphone>();
                //    container.RegisterType<IPower, Power>();
                //    container.RegisterType<IHeadphone, Headphone>();

                //    IHeadphone phone = container.Resolve<IHeadphone>();
                //    IPhone phone1 = container.Resolve<IPhone>();
                //}

                //Ioc容器构造对象的生命周期
                //生命周期类型:瞬时生命周期-----即时创建的  ------------默认就是瞬时的
                //单例生命周期: -----整个进程只有一个实例叫单例----
                //线程单例生命周期:-------每个线程是一个不同的实例,同一个线程的实例是相同的
                //{
                //IUnityContainer container = new UnityContainer();

                //1.TransientLifetimeManager  瞬时生命周期     默认就是瞬时的
                //container.RegisterType<IMicrophone, Microphone>(new TransientLifetimeManager());

                //    //2.SingletonLifetimeManager 单例生命周期     -----整个进程只有一个实例叫单例----
                //    //container.RegisterType<IMicrophone, Microphone>(new SingletonLifetimeManager());

                //    //3.PerThreadLifetimeManager 线程单例生命周期    每个线程是一个不同的实例,同一个线程的实例是相同的
                //    container.RegisterType<IMicrophone, Microphone>(new PerThreadLifetimeManager());

                //    IMicrophone microphone1 = null;
                //    IMicrophone microphone2 = null;
                //    IMicrophone microphone3 = null;
                //    IMicrophone microphone4 = null;
                //    IMicrophone microphone5 = null;
                //    IMicrophone microphone6 = null;


                //    microphone1 = container.Resolve<IMicrophone>();
                //    microphone2= container.Resolve<IMicrophone>();
                //    //主线程
                //    Console.WriteLine($"microphone1&2------{Thread.CurrentThread.ManagedThreadId}");

                //    //重新开启一个子线程
                //    new Action(() =>
                //    {
                //        Console.WriteLine($"microphone3----------{Thread.CurrentThread.ManagedThreadId}");
                //        microphone3 = container.Resolve<IMicrophone>();

                //    }).BeginInvoke(null,null);


                //    //重新开启一个子线程
                //    new Action(() =>
                //    {
                //        Console.WriteLine($"microphone4--------{Thread.CurrentThread.ManagedThreadId}");
                //        microphone4 = container.Resolve<IMicrophone>();

                //    }).BeginInvoke(ar=> {

                //        Console.WriteLine($"microphone5----------{Thread.CurrentThread.ManagedThreadId}");
                //        microphone5 = container.Resolve<IMicrophone>();
                //    }, null);

                //    Task.Run(() =>
                //    {
                //        Console.WriteLine($"microphone6----------{Thread.CurrentThread.ManagedThreadId}");
                //        microphone6 = container.Resolve<IMicrophone>();
                //    });

                //    Thread.Sleep(5000);

                //    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone2)}");
                //    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone3)}");
                //    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone4)}");
                //    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone5)}");
                //    Console.WriteLine($"{object.ReferenceEquals(microphone3, microphone4)}");
                //    Console.WriteLine($"{object.ReferenceEquals(microphone3, microphone5)}");
                //    Console.WriteLine($"{object.ReferenceEquals(microphone4, microphone5)}");
                //    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone6)}");

                //}


                //升级自己的IOC容器(变成有对象生命周期)
                {
                    IContainer container = new Container();

                    container.RegisterType <IMicrophone, Microphone>(new BOBOPerThreadLifetimeManager());

                    //IMicrophone phone1 = container.Resolve<IMicrophone>();
                    //IMicrophone phone2 = container.Resolve<IMicrophone>();


                    //Console.WriteLine($"{object.ReferenceEquals(phone1, phone2)}");



                    IMicrophone microphone1 = null;
                    IMicrophone microphone2 = null;
                    IMicrophone microphone3 = null;
                    IMicrophone microphone4 = null;
                    IMicrophone microphone5 = null;
                    IMicrophone microphone6 = null;


                    microphone1 = container.Resolve <IMicrophone>();
                    microphone2 = container.Resolve <IMicrophone>();
                    //主线程
                    Console.WriteLine($"microphone1&2------{Thread.CurrentThread.ManagedThreadId}");

                    //重新开启一个子线程
                    new Action(() =>
                    {
                        Console.WriteLine($"microphone3----------{Thread.CurrentThread.ManagedThreadId}");
                        microphone3 = container.Resolve <IMicrophone>();
                    }).BeginInvoke(null, null);


                    //重新开启一个子线程
                    new Action(() =>
                    {
                        Console.WriteLine($"microphone4--------{Thread.CurrentThread.ManagedThreadId}");
                        microphone4 = container.Resolve <IMicrophone>();
                    }).BeginInvoke(ar =>
                    {
                        Console.WriteLine($"microphone5----------{Thread.CurrentThread.ManagedThreadId}");
                        microphone5 = container.Resolve <IMicrophone>();
                    }, null);

                    Task.Run(() =>
                    {
                        Console.WriteLine($"microphone6----------{Thread.CurrentThread.ManagedThreadId}");
                        microphone6 = container.Resolve <IMicrophone>();
                    });

                    Thread.Sleep(5000);

                    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone2)}");
                    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone3)}");
                    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone4)}");
                    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone5)}");
                    Console.WriteLine($"{object.ReferenceEquals(microphone3, microphone4)}");
                    Console.WriteLine($"{object.ReferenceEquals(microphone3, microphone5)}");
                    Console.WriteLine($"{object.ReferenceEquals(microphone4, microphone5)}");
                    Console.WriteLine($"{object.ReferenceEquals(microphone1, microphone6)}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemplo n.º 15
0
        /// <summary>
        /// 依赖注入三种方式
        /// 1.构造函数注入
        /// 2.属性注入
        /// 3.方法注入
        /// </summary>
        static void Autofac()
        {
            {   // 模拟netcore内置依赖注入方式
                //// 声明容器
                //IServiceCollection serviceDescriptors = new ServiceCollection();
                //serviceDescriptors.AddTransient(typeof(IPhone), typeof(ApplePhone));
                //serviceDescriptors.AddTransient(typeof(IHeadphone), typeof(Headphone));
                //serviceDescriptors.AddTransient(typeof(IMicrophone), typeof(Microphone));
                //serviceDescriptors.AddTransient(typeof(IPower), typeof(Power));

                //// 注册容器
                //ServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();

                //// 根据抽象获取实例
                //IPhone phone = serviceProvider.GetService<IPhone>();
                //IHeadphone headphone = serviceProvider.GetService<IHeadphone>();
                //IMicrophone microphone = serviceProvider.GetService<IMicrophone>();
                //IPower power = serviceProvider.GetService<IPower>();
            }

            {   // Autofac - 构造函数注入
                // 实现步骤:
                // 1.通过nuget引入Autofac
                // 2.创建容器
                // 3.接口与实现注入
                // 4.接口调用

                //ContainerBuilder containerBuilder = new ContainerBuilder();
                //containerBuilder.RegisterType<ApplePhone>().As<IPhone>();
                //containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
                //containerBuilder.RegisterType<Microphone>().As<IMicrophone>();
                //containerBuilder.RegisterType<Power>().As<IPower>();
                //IContainer container = containerBuilder.Build();
                //IPhone phone = container.Resolve<IPhone>();
                //phone.Call();
            }
            {   // Autofac - 属性注入(PropertiesAutowired支持)
                // 属性注入之后,AndroidPhone中的IMicrophone也被构造了
                //ContainerBuilder containerBuilder = new ContainerBuilder();
                //containerBuilder.RegisterType<AndroidPhone>().As<IPhone>().PropertiesAutowired();   //支持属性注入
                //containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
                //containerBuilder.RegisterType<Microphone>().As<IMicrophone>();
                //containerBuilder.RegisterType<Power>().As<IPower>();
                //IContainer container = containerBuilder.Build();
                //IPhone phone = container.Resolve<IPhone>();
                //phone.Call();
            }
            {   // Autofac - 方法注入
                // 在类中创建方法,构造函数注入之后直接调用该方法
                //ContainerBuilder containerBuilder = new ContainerBuilder();
                //containerBuilder.RegisterType<AndroidPhone>().As<IPhone>();
                //containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
                //containerBuilder.RegisterType<Microphone>().As<IMicrophone>();
                //containerBuilder.RegisterType<Power>().As<IPower>();

                //IContainer container = containerBuilder.Build();
                //IPhone phone = container.Resolve<IPhone>();
                //phone.Init(container.Resolve<IPower>());    //方法注入
                //phone.Call();
            }
            {   // Autofac - 一个接口有多个实现时,选择指定名称的实现
                // 注入时:As会以最后一个实现为准;Named可指定使用哪个实现
                //ContainerBuilder containerBuilder = new ContainerBuilder();
                //containerBuilder.RegisterType<AndroidPhone>().Named<IPhone>("AndroidPhone");
                //containerBuilder.RegisterType<ApplePhone>().Named<IPhone>("ApplePhone");
                //containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
                //containerBuilder.RegisterType<Microphone>().As<IMicrophone>();
                //containerBuilder.RegisterType<Power>().As<IPower>();

                //IContainer container = containerBuilder.Build();
                //IPhone phone = container.ResolveNamed<IPhone>("AndroidPhone");  //指定某个实现
                //phone.Call();
            }
            {   // Autofac - 转移注入关系到AutofacModule类中
                //ContainerBuilder containerBuilder = new ContainerBuilder();
                //containerBuilder.RegisterModule(new AutofacModule());

                //IContainer container = containerBuilder.Build();
                //IPhone phone = container.Resolve<IPhone>();
                //phone.Call();
            }
            {   // Autofac - 配置文件的支持
                // 创建Autofac.json文件进行配置
                ContainerBuilder containerBuilder = new ContainerBuilder();
                //IConfigurationBuilder config = new ConfigurationBuilder();
                //IConfigurationSource autofacJsonConfigSource = new JsonConfigurationSource()
                //{
                //    Path = "Autofac.json",
                //    Optional = false,       //boolean,默认就是false,可不写
                //    ReloadOnChange = false  //同上
                //};
                //config.Add(autofacJsonConfigSource);
                //var module = new ConfigurationModule(config.Build());
                //containerBuilder.RegisterModule(module);

                //IContainer container = containerBuilder.Build();
                //IPhone phone = container.Resolve<IPhone>();
                //IHeadphone headphone = container.Resolve<IHeadphone>();
                //IMicrophone microphone = container.Resolve<IMicrophone>();
                //IPower power = container.Resolve<IPower>();
            }
            {   //自定义ServiceCollection容器
                IHiyServiceCollection serviceCollection = new HiyServiceCollection();
                serviceCollection.AddScope(typeof(IPhone), typeof(ApplePhone));
                serviceCollection.AddScope(typeof(IHeadphone), typeof(Headphone));
                serviceCollection.AddScope(typeof(IMicrophone), typeof(Microphone));
                serviceCollection.AddScope(typeof(IPower), typeof(Power));

                IMicrophone microphone = serviceCollection.GetService <IMicrophone>();
                IPower      power      = serviceCollection.GetService <IPower>();
            }
        }
Exemplo n.º 16
0
 public ApplePhone(IMicrophone microphone)
 {
     this.Microphone = microphone;
 }