我想用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。我该如何解决这个问题?
答案 0 :(得分:1)
StructureMap不会自动进行setter注入(通过有意识的设计),你必须选择它。要么改变你的类,以便通过构造函数注入IDbConnection(首选),要么检查一下,看看如何使用setter注入w / StructureMap:http://structuremap.github.io/setter-injection/