IContainerRegistryExtensions如何将实例注册为singleton

时间:2018-06-04 12:24:17

标签: xamarin.forms prism

我正在尝试将旧的Prism Xamarin表单项目迁移到最新的Prism和XF版本。

我想注册一个工厂来创建像Func<SQLiteConnection>这样的连接:

public class AndroidInitializer : IPlatformInitializer
{
    string DbFilePath => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "test.db3");

    public void RegisterTypes(IContainerRegistry container)
    {
        container.RegisterSingleton<Func<SQLiteConnection>>(() => new SQLiteConnection(DbFilePath));
    }
}

但是这不起作用,没有过载需要像我以前在旧的Prism Unity版本中那样的实例。

2 个答案:

答案 0 :(得分:0)

无论您使用哪个容器,ContainerRegistry都是故意基本的,以一致的方式处理您需要的90%以上的注册。您可以继续使用基础容器进行更高级的注册。

对于DryIoc和Unity,它将是:

containerRegistry.GetContainer().SomeContainerSpecificMethod();

其中SomeContainerSpecificMethod与Prism 6.3中的相匹配

答案 1 :(得分:0)

另一种可能性是使用RegisterInstance注册类的单个实例。不确定是否会影响对象的寿命。

var connection = new SQLiteConnection(DbFilePath)
container.RegisterInstance(connection);