gpt4 book ai didi

c# - iOS 中带有 Xamarin.Forms 的 Autofac 4+ 无法构建

转载 作者:行者123 更新时间:2023-11-29 00:12:48 26 4
gpt4 key购买 nike

版本

iOS 项目

package id="Autofac" version="4.6.1" targetFramework="xamarinios10"

核心项目

TargetFramework=netstandard1.4
PackageTargetFallback=portable-win+net45+wp8+win81+wpa8
PackageReference Include="Autofac" Version="4.6.1"
PackageReference Include="HockeySDK.Xamarin" Version="4.1.5"
PackageReference Include="ReactiveProperty" Version="3.6.0"
PackageReference Include="Xamarin.Forms" Version="2.3.4.267"
PackageReference Include="Xamarin.Forms.Theme.Base" Version="1.0.0.43-pre1"
PackageReference Include="Xamarin.Forms.Theme.Dark" Version="1.0.0.43-pre1"
PackageReference Include="Xamarin.Forms.Theme.Light" Version="1.0.0.43-pre1"

我正在使用这个模板(开箱即用的 PCL 和 Autofac 3.5.2): https://github.com/NowBI/Xamarin-Forms-Mobile-Template

我将核心更新为 netstandard 并更新所有包。

Droid 项目运行良好,依赖注入(inject)工作正常。

但它不适用于 iOS:

构建成功但出现异常:

Container = builder.Build();

System.ArgumentException: The type 'MobileTemplate.Core.Services.MenuItemService' is not assignable to service 'MobileTemplate.Core.Services.IMenuItemService'.

该类在 Android 上正常运行并经过验证。此 Ioc 依赖项是核心项目的一部分:

public interface IMenuItemService
{
IReadOnlyReactiveProperty<IEnumerable<MenuItemModel>> MenuItems { get; }
}

public class MenuItemService : IMenuItemService
{
private readonly IReactiveProperty<IEnumerable<MenuItemModel>> _menuItemsInternal;
public IReadOnlyReactiveProperty<IEnumerable<MenuItemModel>> MenuItems { get; }
...

还有我在 Core 中的 IoC 声明:

public static class IoC
{
public static IContainer Container;

public static void Publish(this ContainerBuilder builder)
{
Container = builder.Build();
}

public static void RegisterCoreDependencies(this ContainerBuilder builder)
{
// -- Add your shared injected services here.
// builder.RegisterType<Class>().As<IInterface>().SingleInstance();
builder.RegisterType<NavigationService>().As<INavigationService>().SingleInstance();
builder.RegisterType<MenuItemService>().As<IMenuItemService>().SingleInstance();

builder.RegisterType<ShoppingItemService>().As<IShoppingItemService>().SingleInstance();
builder.RegisterType<ShoppingCartService>().As<IShoppingCartService>().SingleInstance();
}
}

我在 AppDelegate.cs 的 FinishedLaunching 中调用 IoC:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
RegisterHockeyApp();
BuildIoCContainer();

global::Xamarin.Forms.Forms.Init();
VerifyThemeAssemblies();
LoadApplication(new App());

return base.FinishedLaunching(app, options);
}

我在 Internet 上找了一段时间,不知道该怎么做才能解决这个问题。

我可以恢复我的更改并保留 netstandard 和 autofac 4+ 以返回到 PCL 和 autofac 3.5.2,但这是一个新项目并且希望保持最新。

谢谢你的帮助

Github 上的链接:

https://github.com/autofac/Autofac/issues/864

https://github.com/NowBI/Xamarin-Forms-Mobile-Template/issues/3

最佳答案

我终于通过将我的核心项目升级到 Net Standard 2.0 摆脱了这个异常

关于c# - iOS 中带有 Xamarin.Forms 的 Autofac 4+ 无法构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com