Я пытаюсь создать многослойное приложение (услугу) на C#. Если быть точным, я пытаюсь создать веб-сервис REST с помощью ASP.NET Web Api, который будет размещаться самостоятельно (с Owin). Теперь я дошел до того, что у меня есть следующие компоненты (каждый из них находится в отдельной .dll):
- RestHost (который в моем случае является консольным приложением)
- RestService (здесь моя веб-служба witch все контроллеры)
- InterfacesLayer
- ModelLayer (здесь являются объектами, которые я использую, только с их методами получения/установки)
- DataLayer (каждый класс внутри ModelLayer имеет свой собственный класс в Datalayer, плюс есть Класс соединения с базой данных)
- BusinessLayer (здесь вся логика завершена, опять же, каждый класс из модели имеет свой собственный класс, и этот уровень общается с службой REST и datalaye р).
Уровень доступа к данным в C# с IOC (инъекция зависимостей)
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), но без фактического создания экземпляра Firebird в моем RESTService.
Благодаря
в конце концов, я сделал то, довольно просто. Я просто пишу свою конфигурацию БД внутри своего файла APP.config (моего приложения для хостинга), а затем читаю строку подключения в своем datalayer (каждый раз, когда мне нужно подключение). Может быть, я мог бы также хранить его где-нибудь, поэтому мне не нужно его читать каждый раз, но пока это нормально для меня. Спасибо за ответ – dev01
Рад, что это помогло.Если вы довольны ответом, не забудьте отметить ответ правильно! –