繁体   English   中英

使用Xamarin的Autofac 4 + .iOS中的Forms无法生成

[英]Autofac 4+ With Xamarin.Forms in iOS failed to build

版本

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项目运行良好,依赖项注入工作正常。

但是在iOS上不起作用:

建立成功,但我遇到了一个例外:

Container = builder.Build();

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

该类还可以,并且可以在Android上正常运行,并经过验证。 此Ioc依赖项是Core项目的一部分:

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

通过将我的Core项目升级到Net Standard 2.0,我终于摆脱了这种例外

还要确保在.NET标准库中是否有对Newtonsoft.Json的引用(显然除了AutoFac以外),也要将其添加到iOS项目中。 我遇到了这个问题(似乎完全不相关,但是在核心项目中对我的容器的.Build()调用失败了,并且异常与您相同),然后添加该程序包就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM