我正在使用Xamarin.Forms.DependencyService
来解决当前特定于平台的接口实现(在我的示例IDirectoryProvider
中),并且我正在使用Unity进行依赖项注入。
在App.xaml.cs
中进行设置:
var container = new UnityContainer();
// Normal registration for Unity DI
container.RegisterSingleton<IMessageHub, MessageHub>();
// Registration of a platform-specific implementation using DependencyService
// This line throws error "System.MissingMethodException: Default constructor not found for type AndroidDirectoryProvider"
container.RegisterInstance(typeof(IDirectoryProvider), DependencyService.Get<IDirectoryProvider>());
现在我要尝试的是将IMessageHub
注入到IDirectoryProvider
的Android实现中。但是,如果我尝试这样做,上述行会抛出一个错误,这是有道理的,因为DependencyService
无法创建AndroidDirectoryProvider
的实例(实现IDirectoryProvider
) ,因为缺少默认的构造函数。
构造函数如下:
public AndroidDirectoryProvider(IMessageHub messageHub)
{
...
}
正如我所说,我理解为什么会这样,但是我想知道是否有可能使用我的Unity容器解决特定于平台的实现中的构造函数依赖项,以便特定于平台的实现中的依赖项注入工作相同方式与我的共享代码中的方式相同。上面链接中显示的所有示例都使用一个空的构造函数。
有没有办法做到这一点?
预先感谢, 罗纳德