小编Jac*_*nes的帖子

'SQLite.SQLiteConnection'的类型初始值设定项引发了异常

我正在尝试实现SQLite的基本用法。我有一个Button和一个EditText。我要存储的内容EditText OnClick

我正在关注:https : //developer.xamarin.com/guides/android/application_fundamentals/data/part_3_using_sqlite_orm/

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/databases/

我无法通过下面的启动代码,而没有得到随后的错误: var db = new SQLiteConnection (dbPath);

错误:

“ SQLite.SQLiteConnection”的类型初始值设定项引发了异常。

内部异常:

System.Exception:这是“诱饵”。您可能需要将SQLitePCLRaw.bundle_ * nuget包之一添加到平台项目中。
在SQLitePCL.Batteries_V2.Init()[0x00000]在<9baed10c674b49e0b16322f238b8ecc1>:0在/Users/vagrant/git/src/SQLite.cs:169的SQLite.SQLiteConnection..cctor()[0x00000]处

我已经在PCL和Android项目上都安装了NuGet软件包。我看到安装了以下软件包:

SQLitePCLRaw.provider.e_sqlite3.android
SQLitePCLRaw.lib.e_sqlite3.android
Run Code Online (Sandbox Code Playgroud)

我试过安装:

SQLitePCLRaw.bundle_e_sqlite3
Run Code Online (Sandbox Code Playgroud)

如前所述,代码是可能的最基本实现:

try
{
    string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TestDB-DEV.db3");

    var db = new SQLiteConnection(dbPath);
    db.CreateTable<PersonName>();
}
Run Code Online (Sandbox Code Playgroud)

我花了几天时间,尝试了许多资源,例如:https : //forums.xamarin.com/discussion/87289/sqlite-net-pcl-bait-issue,但最终没有成功。

不幸的是,我所见过的唯一答案就是胡说八道,例如“它能正常工作”,“不确定我做了什么”,“清理/重建”,例如以前的链接,其他诸如Xamarin SQLite之类的SO帖子“这是'诱饵'”。

这是我package.config的Android项目:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="sqlite-net-pcl" version="1.4.118" targetFramework="monoandroid60" />
  <package id="SQLitePCLRaw.bundle_green" version="1.1.5" targetFramework="monoandroid60" />
  <package id="SQLitePCLRaw.core" version="1.1.5" targetFramework="monoandroid60" …
Run Code Online (Sandbox Code Playgroud)

c# xamarin.android xamarin sqlite-net-pcl

4
推荐指数
4
解决办法
4415
查看次数

如何反转/注入依赖 - MassTransit 消费者

我正在处理一个项目并且一切正常,但是我有一个紧密耦合的依赖项,我不知道如何反转/注入。

问题出在我的 Consumer 类中,它将接收一条命令消息来启动一个进程,该进程是全局消息队列服务项目的一部分,例如MyCompany.MQ.Services,但对命令消息告诉它启动的进程具有紧密耦合的依赖关系,例如:

public Task Consume(ConsumeContext<MyMessageInterface> context)
{
    logger = new LoggerConfiguration()
        .WriteTo.Console()
        .CreateLogger();

    try
    {
        TightCoupleProcess tcp = new TightCoupleProcess(context);

        logger.Information("{Blah}, {Blah}, {Blah}", context.Message.exampleVar1, context.Message.exampleVar2, context.Message.exampleVar3);

        tcp.StartProcess();

        return Task.CompletedTask;

    }
    catch (Exception ex)
    {
        return Task.FromException(ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

Task Consume是 MassTransit 的一部分,我无法修改 的签名,Consume因为这实际上IConsumerMassTransit.

我想我想要的是一种反转/注入该依赖项的方法,以便我的全局MQ.services项目不依赖于调用它的项目。我想我对倒置/注入有一些误解,但我不确定如何表达我的缺点。也许我想要的不可能。我知道我不能修改接口实现,但如果像下面这样的东西工作,我会很酷,但由于Consume是 MassTransit 接口的实现,我认为我不能从我的调用类中注入匿名函数:

public Task Consume(ConsumeContext<MyMessageInterface> context, AnonFunc() func)
{ 
    try
    {
        func(context)

        logger.Information("{Blah}, {Blah}, {Blah}", context.Message.exampleVar1, context.Message.exampleVar2, context.Message.exampleVar3);

        return Task.CompletedTask;

    } …
Run Code Online (Sandbox Code Playgroud)

c# reflection dependency-injection masstransit constructor-injection

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