[英]Autofac 4+ With Xamarin.Forms in iOS failed to build
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.