我正在尝试实现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) 我正在处理一个项目并且一切正常,但是我有一个紧密耦合的依赖项,我不知道如何反转/注入。
问题出在我的 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因为这实际上IConsumer是MassTransit.
我想我想要的是一种反转/注入该依赖项的方法,以便我的全局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