Autofac使用params为SQLiteAsyncConnection注入单例

时间:2017-07-10 07:06:56

标签: c# sqlite xamarin dependency-injection

我正在使用PCL进行Xamarin Native项目,我有一个第一类用于为每个平台定义数据库的位置:

  public class DatabaseConfiguration : IDatabaseConfiguration
    {
        public string GetConnectionString()
        {
            //This code is specific to each platform
            return PathForEachPlatform;
        }
    }

我这样注射:

  builder.RegisterType<DatabaseConfiguration>()
                    .As<IDatabaseConfiguration>()
                    .SingleInstance();

现在我不想将SQLiteAsyncConnection注入我的存储库类。这个课程来自这个难题:https://www.nuget.org/packages/sqlite-net-pcl

这是我的存储库构造函数:

    private SQLiteAsyncConnection Connection { get; }

            public SQLiteRepository(IDatabaseConfiguration configuration)
            {
                Connection = new SQLiteAsyncConnection(configuration.GetConnectionString()); // I wan't to inject the connection not create a new one.
            }
}

SQLiteAsyncConnection没有提供接口,因此我决定使用单例。但是构造函数需要一个数据库路径。此路径由上面的另一个注入使用GetConnectionString()方法定义。我怎么能这样做?

现在我有了这段代码:

 builder.RegisterInstance<SQLiteAsyncConnection>()
        .WithParameter(new TypedParameter(typeof(string),"HERE THE PATH TO PASS BUT HOW ?"))
        .SingleInstance();

1 个答案:

答案 0 :(得分:1)

builder.Register
    (c => new SQLiteAsyncConnection(
        c.Resolve<IDatabaseConfiguration>().GetConnectionString()))
    .SingleInstance();

这将允许您注册连接并注入必要的连接字符串。