在我当前的WebAPi项目中,我使用UnitOfWork和Repository模式。我目前的DI代码如下:
public class DependencyInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
//log4net
Component.For<ILogService>()
.ImplementedBy<LogService>()
.LifeStyle.PerWebRequest,
Component.For(typeof(IDatabaseFactory<>))
.ImplementedBy(typeof(DatabaseFactory<>))
.LifestylePerWebRequest(),
Component.For(typeof(IUnitOfWork<>))
.ImplementedBy(typeof(UnitOfWork<>))
.LifestylePerWebRequest(),
Types.FromThisAssembly()
.BasedOn<IHttpController>()
.LifestyleTransient(),
//unit of work and repositories here
Classes.FromAssemblyNamed("MyServer.DAL")
.Where(type => type.Name.EndsWith("Repository"))
.WithServiceAllInterfaces()
.LifestylePerWebRequest(),
//service layer
Classes.FromAssemblyNamed("MyServer.Service")
.Where(type => type.Name.EndsWith("Service"))
.WithServiceAllInterfaces()
.LifestylePerWebRequest()
);
}
}
客户端是一个WinForms应用程序,每个客户端都可以连接到不同的数据库(具有相同的模型)
以上所有内容均按照webrequest生活方式设置。我主要关注的是为每个请求创建/打开数据库连接,因此我不能在控制器的操作之间共享上下文/ uow。
此外,我需要在我的WebAPI包中引用EntityFramework包,即使我自己没有使用它。然而,DI需要它。
这是必要的,还是可以改变某些班级的生活方式?