Xamarin:在特定于平台的实现中共享代码的构造方法注入吗?

时间:2018-07-18 08:04:49

标签: c# xamarin dependency-injection dependencies code-injection

我正在使用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容器解决特定于平台的实现中的构造函数依赖项,以便特定于平台的实现中的依赖项注入工作相同方式与我的共享代码中的方式相同。上面链接中显示的所有示例都使用一个空的构造函数。

有没有办法做到这一点?

预先感谢, 罗纳德

0 个答案:

没有答案