使用StructureMap设置OrmLite

时间:2016-03-27 10:44:53

标签: c# asp.net structuremap ormlite-servicestack

我想用StructureMap创建一个OrmLite的基本IoC,但是我做错了。

在OrmLite的网站上,他们给出了一个简单的例子:

container.Register<IDbConnectionFactory>(c => 
    OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider)); //InMemory Sqlite DB

所以我想在我新创建的带有StructureMap的WebAPI2应用程序中使用它。

我已经安装了StructureMap.WebAPI2 nuget,我有以下配置:

 container.Configure(x => {
        x.For<IAuthenticationService>().Use<AuthenticationService>();

        x.For<IDbConnectionFactory>()
                    .Use<OrmLiteConnectionFactory>().Ctor<string>("connectionString").Is("Server=(localdb)\v11.0;Integrated Security=true;")
                    .Ctor<IOrmLiteDialectProvider>("dialectProvider").Is(SqlServerOrmLiteDialectProvider.Instance);
  });

在这种情况下,IAuthenticationServer正常实例化。但是当我尝试访问DbConnection时,它没有被注入而且它是空的

    public IDbConnectionFactory DbFactory { get; set; } //injected by IOC

    IDbConnection db;
    IDbConnection Db
    {
        get
        {
            return db ?? (db = DbFactory.Open());
        }
    }

这就是我尝试访问数据库的方式。在getter中,DbFactory为null。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

StructureMap不会自动进行setter注入(通过有意识的设计),你必须选择它。要么改变你的类,以便通过构造函数注入IDbConnection(首选),要么检查一下,看看如何使用setter注入w / StructureMap:http://structuremap.github.io/setter-injection/