小编Bay*_*que的帖子

在IOC中为多个接口注册相同的单例

我有一个需要能够处理本机资产和属性类型的服务,所以我在我的PCL中有一个核心服务,BaseThemeService它实现了接口IThemeService.我需要能够从核心PCL访问一些属性,这就是它实现IThemeService核心PCL的原因.

在每个平台项目中,我都有一个ThemeService实现IDroidThemeService和扩展的类BaseThemeService.然后我IDroidThemeService手动在每个项目的设置中注册单例.

这有效,除了现在有2个实例BaseThemeService.1 IThemeService为核心注册,1 IDroidThemeService为平台注册.

为了解决这个问题,我自己构建它,然后适当地注册每个:

protected override void InitializeFirstChance()
{
    ThemeService themeService = new ThemeService(Mvx.Resolve<IMvxJsonConverter>(), Mvx.Resolve<IMvxResourceLoader>());
    Mvx.RegisterSingleton<IDroidThemeService>(themeService);
    Mvx.RegisterSingleton<IThemeService>(themeService);

    base.InitializeFirstChance();
}
Run Code Online (Sandbox Code Playgroud)

这似乎应该可行,但它并没有,因为IMvxJsonConverterIMvxResourceLoader服务还没有注册.

我在MvvmCross文档中看到,使用延迟构造的自动加载将注册所有已实现接口的服务.有没有办法在这里使用该功能来删除手动注册?


回答

protected override void InitializeFirstChance()
{
    Mvx.RegisterSingleton<IDroidThemeService>(GetThemeService);
    Mvx.RegisterSingleton<IThemeService>(GetThemeService);

    base.InitializeFirstChance();
}

private DroidThemeService DroidSingletonService = null;
private DroidThemeService GetThemeService()
{
    if (DroidSingletonService == null)
    {
        DroidSingletonService = Mvx.IocConstruct<DroidThemeService>();
    }
    return DroidSingletonService;
}
Run Code Online (Sandbox Code Playgroud)

这最终成为最终解决方案.我知道RegisterAsLazySingleton自动解决这个问题的外观,所以如果我找到一种方法来实现这个稍微清洁的话,我会再次更新.

c# mvvmcross xamarin

6
推荐指数
1
解决办法
1837
查看次数

如何检测在/etc/init.d脚本中初始化网络的时间?

我有一个/etc/init.d/脚本,它在启动时启动,需要联网才能到位.我将rc start设置为99,所以这是加载的最后一件事,但是网络没有立即加载,我现在不得不依赖30秒的睡眠命令来等待网络加载.

操作系统是针对嵌入式系统(Yocto Project)修改的Ubuntu.文件系统是相同的,但服务非常有限,所以它使用Sysvinit.

有没有办法检查所有网络是否已完成加载?

这是脚本,如果有帮助:

#!/bin/sh
#
# Daemon Name: blerd
#  
# chkconfig: - 3 99 1
# description: M3 Bluetooth Low Energy Relay Daemon

# Source function library.
. /etc/init.d/functions

PROGRAM=bler
LOCKFILE=/var/lock/subsys/$PROGRAM

start() { 
    [ -x $EXE ] || exit 5

    echo -n "Starting $PROGRAM: ";

    if [ -e $LOCKFILE ]; then
        echo "Instance of $PROGRAM exists."
        return 0;
    fi

    sleep 30
    $PROGRAM
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        echo "Success"
    else
        echo "Failed"
    fi …
Run Code Online (Sandbox Code Playgroud)

bash shell ubuntu init.d rc

5
推荐指数
1
解决办法
1万
查看次数

Laravel类没有在第一次运行时编译

我使用了Net Tuts上发布的教程+(http://hub.tutsplus.com/tutorials/combining-laravel-4-and-backbone--net-31745)并按照说明实现了错误处理.

在composer autoload部分中,我正在加载error.php文件.它包含一个名为NotFoundException的类,用于为REST请求创建异常.

当我使用工匠转储自动加载时,它构建正常,并在第一次运行时,我得到错误"ReflectionException:类NotFoundException不存在".这仅在转储后的第一次运行时发生.后续运行很好,当我遇到触发异常的实例时,异常类可以正常工作.每次运行我的单元测试时都会出现此错误,导致我的测试失败,但它只出现在调用异常的第一个文件中.我在2个单独的文件中运行了两个测试,它们都使用异常作为断言,第一个获取和错误,而第二个传递.

我对Laravel来说还是一个新手,所以它可能是一个简单的修复,但我错过了什么?是否应该有另一个我忽略的参考?

以下步骤的输出:

root@ubuntu:/var/www/api# composer dump-autoload
Generating autoload files
root@ubuntu:/var/www/api# php artisan clear-compiled
root@ubuntu:/var/www/api# php artisan optimize
Generating optimized class loader
Compiling common classes
root@ubuntu:/var/www/api# phpunit
PHPUnit 3.7.22 by Sebastian Bergmann.

Configuration read from /var/www/api/phpunit.xml

E........................................

Time: 2 seconds, Memory: 46.00Mb

There was 1 error:

1) AuthControllerTest::testProcess
ReflectionException: Class NotFoundException does not exist

/var/www/api/bootstrap/compiled.php:7539
/var/www/api/bootstrap/compiled.php:7533
/var/www/api/bootstrap/compiled.php:7508
/var/www/api/bootstrap/compiled.php:7477
/var/www/api/bootstrap/compiled.php:7472
/var/www/api/vendor/composer/ClassLoader.php:185
/var/www/api/vendor/composer/ClassLoader.php:185
/var/www/api/bootstrap/compiled.php:165
/var/www/api/bootstrap/compiled.php:142
/var/www/api/bootstrap/compiled.php:444
/var/www/api/bootstrap/compiled.php:83
/var/www/api/bootstrap/compiled.php:163
/var/www/api/bootstrap/compiled.php:142
/var/www/api/bootstrap/compiled.php:444
/var/www/api/bootstrap/compiled.php:186
/var/www/api/bootstrap/compiled.php:175
/var/www/api/bootstrap/compiled.php:142
/var/www/api/bootstrap/compiled.php:444
/var/www/api/bootstrap/compiled.php:4763 …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-4

1
推荐指数
1
解决办法
8638
查看次数

将数据传递给动态CSS文件?

这更像是一个浏览器将要做什么的问题,而不是后端架构.

我正在使用codeigniter并有一个控制器设置来处理资产(CSS,JS和图像),目前我只是简单地处理PHP文件中的PHP并将它们作为CSS文件呈现给浏览器,因此www.mysite.com/asset/home.css将调用资产类并从单个文件生成home的CSS文件.

我想使CSS文件的请求更加动态,以便请求将确定应该组合的多个文件,然后传递给less.php解析和最小化.

考虑到缓存问题,将变量传递给CSS类的最佳方法是什么?扁平链接URI变量?传统的GET URI?我可以使用数据库来引用其组件的给定名称,但这不是很多开销吗?

欢迎任何想法或意见!

++浏览器如何处理类似的东西standard.menu.comments.css

+++我最终使用附加到文件的URI字符串.它并不像我想要的那么干净,但似乎有效.我很可能会很快转移到一个斜杠分隔的URI解析器来清理请求行.谢谢你的帮助!

css php codeigniter cross-browser less

0
推荐指数
1
解决办法
3618
查看次数

C++从传入的引用变量中分配引用变量?

我试图避免使用全局变量,因为我不知道代码将来需要如何扩展,所以我希望能够生成具有独立互斥锁的多个线程.我正在尝试将Mutex和条件变量传递给类构造函数.

头文件:

class Receiver {
private:
    std::mutex & _global_mtx;
    std::condition_variable & _global_cv;
    bool & state;
public:
    // Construct
    Receiver(std::mutex &, std::condition_variable &, bool &);
};
Run Code Online (Sandbox Code Playgroud)

代码文件:

/*-------------------------------------
    Construct
--------------------------------------*/
Receiver::Receiver(std::mutex & mtx, std::condition_variable & cv, bool & state){
    _global_mtx = mtx;
}
Run Code Online (Sandbox Code Playgroud)

这显然是导致问题,因为_global_mtx已经声明为引用变量,所以我不知道如何将引用传递mtx_global_mtx.

另外,我知道在声明引用时你必须为它指定一个值来引用(可能是NULL)所以有没有更好的方法来处理这个我正在做的事情?我确信我不是第一个也是唯一一个遇到这种需求的人,但我不确定在哪里寻找答案.

c++ c++11

0
推荐指数
1
解决办法
121
查看次数

标签 统计

php ×2

bash ×1

c# ×1

c++ ×1

c++11 ×1

codeigniter ×1

cross-browser ×1

css ×1

init.d ×1

laravel ×1

laravel-4 ×1

less ×1

mvvmcross ×1

rc ×1

shell ×1

ubuntu ×1

xamarin ×1