是否可以在Unity3d中以某种方式使用Autofac?

时间:2018-06-06 19:30:49

标签: unity3d autofac

我正在使用Unity3d 2018.1.0f3,它使用的是.net 4.6x并且有netstandard 2.0。有谁知道是否有可能让Autofac在Unity中运行?目前,由于可能的运行时问题,我收到一条错误消息,说它已卸载程序集。

谢谢, MH

2 个答案:

答案 0 :(得分:1)

我对其他内容一无所知,我使用的是旧版本,但我在Unity中使用AutoFac(3.5.2),完全没有问题。我认为团结所需的设置略有不同,但不是很确定。但是我有一个编辑器窗口系统,该系统将ScriptableObjects用于数据库,将单独的页面用于不同的项目类型,并使用autofac注入数据库,找到所有子页面并自动加载它们。

如果有帮助,这是我的处理方法:

private ISWeaponDatabase weaponDb;
private ISQualityDatabase qualityDb;
private ISArmorDatabase armorDb;
private int currentTab;
private ContainerBuilder builder;
private BasePage[] pages;

DatabaseConfig dbConfig = Resources.Load<DatabaseConfig>("DatabaseConfig");
if (dbConfig == null) return;
if (weaponDb == null) weaponDb = ISWeaponDatabase.GetDatase<ISWeaponDatabase>(dbConfig.DataFolder, dbConfig.WeaponDatabase.DatabaseFile);
if (qualityDb == null) qualityDb = ISWeaponDatabase.GetDatase<ISQualityDatabase>(dbConfig.DataFolder, dbConfig.QualityDatabase.DatabaseFile);
if (armorDb == null) armorDb = ISArmorDatabase.GetDatase<ISArmorDatabase>(dbConfig.DataFolder, dbConfig.ArmorDatabase.DatabaseFile);
builder = new ContainerBuilder();
builder.RegisterInstance(weaponDb).As<ISWeaponDatabase>();
builder.RegisterInstance(armorDb).As<ISArmorDatabase>();
builder.RegisterInstance(qualityDb).As<ISQualityDatabase>();
builder.RegisterAssemblyTypes(Assembly.GetAssembly(GetType())).Where(t => t.Name.EndsWith("EditorPage")).As<BasePage>().SingleInstance();
IContainer container = builder.Build();
pages = container.Resolve<IEnumerable<BasePage>>().ToArray();

答案 1 :(得分:0)

是的,有可能,很高兴知道你到目前为止尝试了什么,但基本上,当你导入所有其他第三方库时,你将导入它。

我假设您使用的是最新的Windows计算机并且您使用的是VS,因为您没有向我们提供任何相关信息。

  1. 在VS中启动您的NuGet PM(工具&gt; NuGet包管理器&gt;控制台)

  2. 命令:Install-Package Autofac -Version 4.8.1 或者您获取NuGet包的首选方式https://www.nuget.org/packages/Autofac/(VS当然也有效)

  3. 现在你应该在/Packages/Autofac.4.8.1/lib/net45

  4. 中有一个包
  5. 将DLL复制到您的assets / lib文件夹(或任何您想要的地方)

  6. 如果您返回Unity,它将立即加载Autofac

  7. 现在你可以去任何一个班级并输入&#34;使用Autofac&#34;并开始。