Dependency injection ServiceStack IoC DI设计在单独的项目中解决问题
我有一个使用SS(很棒的框架!!)的项目。 这是一个RESTAPI。我在提供接口的同一解决方案中引用了另一个项目(我在VS2012中这样做)。我还有一个第三个项目,在同一个解决方案中实现了这个接口。让我们把这些项目称为:Dependency injection ServiceStack IoC DI设计在单独的项目中解决问题,dependency-injection,inversion-of-control,
servicestack,Dependency Injection,Inversion Of Control,
servicestack,我有一个使用SS(很棒的框架!!)的项目。 这是一个RESTAPI。我在提供接口的同一解决方案中引用了另一个项目(我在VS2012中这样做)。我还有一个第三个项目,在同一个解决方案中实现了这个接口。让我们把这些项目称为: WebAPI接口引擎 WebAPI引用了接口和引擎。引擎引用接口 到目前为止一切顺利 我在appHost(WebAPI的)中使用IOC来注册引擎的接口,这也很有效 我的问题是我的引擎需要访问Ormlite数据库。我已将ServiceStatck.OrmLight.Mysql的引
WebAPI
接口
引擎
WebAPI引用了接口和引擎。引擎引用接口
到目前为止一切顺利
我在appHost(WebAPI的)中使用IOC来注册引擎的接口,这也很有效
我的问题是我的引擎需要访问Ormlite数据库。我已将ServiceStatck.OrmLight.Mysql的引用添加到引擎中,但在引擎构造函数中引用时,该引用为null
public Engine()
{
using (var db = DbConnectionFactory.OpenDbConnection())
{
//do db operations
}
}
我可以从Webapi访问并找到数据库。如何将数据库通知引擎?我似乎迷失在层层之中
我希望这是清楚的(考虑到)。如果您的AppHost(在WebAPI项目中)正在注册并解析Engine/IEEngine实例,那么您需要将IDbConnectionFactory注入到您的引擎实例中
最好的方法是通过构造函数注入
修改引擎类以获取对IDbConnectionFactory的依赖:
public class Engine : IEngine
{
IDbConnectionFactory dbFactory = null;
public Engine(IDbConnectionFactory dbFactory) // IoC container injects dbFactory
{
this.dbFactory = dbFactory;
}
public void DoSomething()
{
using (var db = dbFactory.OpenDbConnection())
{
//do db operations
}
}
}
如果您的依赖项已注册,引擎将从主AppHost获得dbFactory
至于项目/解决方案设置,我建议查看推荐的ServiceStack
()。你有机会看看吗?除非我遗漏了什么——这不是我的问题。我的问题是,在我的引擎项目中,我没有访问容器的权限,因此无法访问在webAPI的appHost中注册的DbConnectionFactor。我对SS不太了解,但从您的问题来看,您似乎试图在webAPI项目和引擎项目之间创建循环依赖关系使用国际奥委会。我认为您最好将ormLite依赖项转移到引擎,并将其配置保存在WebApi配置中。