簡體   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