在MainActivity.cs
和AppDelegate.cs
中,我像这样初始化Configuration
对象:
LoadApplication(new App(Configuration.GetConfiguration, new AndroidInitializer()));
我将该对象插入App
类的构造函数中。
我想在RegisterTypes
方法中注册相同的对象。
public partial class App : PrismApplication
{
public App(IConfiguration configuration, IPlatformInitializer initializer = null) : base(initializer)
{
Configuration = configuration;
}
private IConfiguration Configuration { get; }
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// Here Configuration is null.
containerRegistry.RegisterInstance<IConfiguration>(Configuration);
// Need to access configuration again.
var restClient = new RestClient(Configuration.BaseApiUrl);
containerRegistry.RegisterInstance<IRestClient>(restClient);
}
}
在RegisterTypes
方法中,Configuration
为null,因为它是在构造方法之前调用的。
有任何解决方法吗?
答案 0 :(得分:1)
有两种方法可以完成所需的工作,具体取决于您要使用IConfiguration
完成的工作:
如果您要做的只是注册IConfiguration
的实例,那么您应该在IPlatformInitializer中注册它,而不是在您的应用程序中注册。例如,您可能有:
public class iOSInitializer : IPlatformInitalizer
{
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistery.RegisterInstance<IConfiguration>(new iOSConfiguration());
}
}
如果您需要专门访问IConfiguration
,并且可以遵循第一种模式并解决它即可完成您需要做的事情...否则,您可以执行以下操作:
public class iOSInitializer : IPlatformInitalizer, IConfiguration
{
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistery.RegisterInstance<IConfiguration>(this);
}
}
然后在您的应用中,您只需执行以下操作即可:
var configuration = (IConfiguration)PlatformInitializer