在Xamarin Forms中,我有一个这样的解决方案:
Solution
|- Libraries
| |- IInterface.cs
| |- Etc.
|
|- Libraries.iOS
| |- Interface.cs
| |- Etc.
|
|- Forms.App
| |- App.cs
| |- Etc.
|
|- Forms.App.iOS
| |- Etc.
namespace a
{
public interface IInterface
{
void Function ();
}
}
[assembly: Xamarin.Forms.Dependency(typeof(a.Interface))]
namespace a
{
public class Interface : IInterface
{
public void Function ()
{
return;
}
}
}
namespace a
{
public class App
{
public static Page GetMainPage ()
{
var inter = DependencyService.Get<IInterface> (); // This is always null.
return new ContentPage {
Content = new Label {
Text = "Hello, Forms!",
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
},
};
}
}
}
如何让依赖服务找到我的接口实现? 我需要将它们放在一个单独的项目中,因为我需要在不同的项目中使用相同的实现。
答案 0 :(得分:7)
我有
[assembly: Dependency(typeof(TestService.IMyService))]
,我应该在哪里
[assembly: Dependency(typeof(TestService.iOS.MyService))]
所以总是采用实现而不是平台特定代码中的接口!否则你得到
System.MissingMethodException:找不到[Interface]
的默认构造函数
答案 1 :(得分:5)
添加更多信息。 它似乎是与库中的链接相关的错误,它定义了依赖服务,如here所述。
我通过手动实例化依赖服务的iOS实现解决了这个问题。
在AppDelegate.cs的iOS项目FinishedLaunching方法中,创建iOS依赖服务实现的对象,例如
var obj = new Company.Project.iOS.NativeImplementation_iOS ();
这对我有用。
答案 2 :(得分:4)
这是因为您的Interface.cs实现没有空构造函数。
要使DependencyService工作,你必须有一个空的构造函数,如下所示:
public Interface(){}
您的Forms.App解决方案必须引用包含接口声明的解决方案。
答案 3 :(得分:3)
如果您的依赖项为null,则另一个原因可能是您的类型被命名为您的服务,并且在Dependency中声明了错误的类型。至少对我来说就是这样。
答案 4 :(得分:2)
通过使用空Init方法创建静态类来解决它。并在AppDelegate.FinishedLaunching方法的开头调用该方法。
答案 5 :(得分:1)
也许确保您引用PCL库和跨平台库
Forms.App.iOS
references - Libraries
references - Libraries.iOS
这对我有用