Web API中的Castle.Windsor生活方式

时间:2014-11-06 07:52:05

标签: c# asp.net-web-api castle-windsor

在我当前的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需要它。

这是必要的,还是可以改变某些班级的生活方式?

0 个答案:

没有答案