我正在尝试用 C# 构建一个多层应用程序(服务)。准确地说,我正在尝试使用 ASP.NET Web Api 构建一个 REST Web 服务,它将由我自己(使用 Owin)托管。现在我已经有了以下组件(每个组件都在一个单独的 .dll 中):
- RestHost(在我的例子中是一个控制台应用程序)
- RestService(这是我的所有控制器的 Web 服务)
- InterfacesLayer
- ModelLayer(这里是我使用的对象,只是使用它们的 get/set 方法)
- DataLayer(ModelLayer 中的每个类在 Datalayer 中都有自己的类,另外还有数据库连接类)
- BusinessLayer(这里所有的逻辑都完成了,模型中的每个类都有自己的类,并且该层与 REST 服务和数据层通信)。
RestHost - 顾名思义,它是我服务的主机。除此之外,我还在这里进行依赖注入。由于代码不多,我将其发布:
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
// Dependency Resolving
container.RegisterType<IAktData, AktDataImpl>(new HierarchicalLifetimeManager());
container.RegisterType<IAktService, AktServiceImpl>(new HierarchicalLifetimeManager());
container.RegisterType<ILeistungData, LeistungDataImpl>(new HierarchicalLifetimeManager());
container.RegisterType<ILeistungService, LeistungServiceImpl>(new HierarchicalLifetimeManager());
container.RegisterType<IPersonData, PersonDataImpl>(new HierarchicalLifetimeManager());
container.RegisterType<IPersonService, PersonServiceImpl>(new HierarchicalLifetimeManager());
container.RegisterType<IPersistent, FirebirdDB>(new HierarchicalLifetimeManager());
string serverAddress = ConfigurationManager.AppSettings["serverAddress"];
string connectionString = ConfigurationManager.ConnectionStrings["connectionStrings"].ConnectionString;
using (RESTService.StartServer(container, serverAddress,connectionString ))
{
Console.WriteLine("Server started @ "+ DateTime.Now.ToString() + " on " + serverAddress + "/api");
Console.ReadLine();
}
}
哦,我忘了提及,但是您可以从代码中看到它,在我的主机应用程序中,我还在阅读我的连接字符串所在的 App.Config。
这是我的问题。我不确定如何从我的服务访问数据库连接。在这里,我在我的数据访问层中实现了 Firebird,但我不确定如何在我的应用程序中使用它。当然,最简单的方法就是创建一个实例并将其传递给我的服务,但这是我想做的最后一件事。我也一直在考虑将 Firebird 实现为静态类或单例,但是我不能使用我的 IPersistant 接口(除此之外,我认为这不是正确的方法)。
所以我的问题是,这种东西有什么最佳实践吗?我需要以某种方式将连接字符串传递给 IPersistent (Firebird) 的实现,但实际上没有在我的 RESTService 中创建 Firebird 的实例。
谢谢