我想在C#中構建一個多層應用程序(服務)。確切地說,我正在嘗試使用ASP.NET Web Api構建一個REST Web服務,該Web服務將由我自己託管(使用Owin)。現在我到目前爲止,我有以下組件(每個都在一個單獨的.dll):
- RestHost(在我的情況下是一個控制檯應用程序)
- RestService(這是我的網絡服務女巫所有控制器)
- InterfacesLayer
- ModelLayer(這裏我用的對象,只是他們的get/set方法)
- 數據層(ModelLayer內每一個類在數據層自己的類,加上存在數據庫連接類)
- BusinessLayer(這裏所有的邏輯都完成了,模型中的每個類都有自己的類,並且該層與REST服務和datalaye進行通信R)。
用IOC(依賴注入)在C#中的數據訪問層
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實例。
感謝
最後我已經做到了非常簡單的。我只在我的APP.config文件(我的服務託管應用程序)中寫入我的數據庫配置,然後在我的數據層中讀取連接字符串(每當我需要連接時)。也許我也可以將它存儲在某個地方,所以我不需要每次都閱讀它,但現在對我來說這沒問題。感謝您的回答 – dev01 2014-10-06 13:06:29
很高興幫助。如果你對答案感到滿意,那麼不要忘記標記答案是正確的! – 2014-10-06 13:25:58