При разработке веб-проекта с использованием ASP.NET MVC я столкнулся с проблемой сопряжения.Когда я создаю собственную фабрику контроллеров (или средство разрешения зависимостей при использовании MVC 3), мне нужно, чтобы эта фабрика каким-то образом знала, где получить зависимости.Вот мой код:
//from Global.asax.cs
DependencyResolver.SetResolver(new StructureMapControllerFactory());
class StructureMapControllerFactory: IDependencyResolver {
Container repositories;
public StructureMapControllerFactory()
{
repositories = new RepositoriesContainer();
}
//... rest of the implementation
}
class RepositoriesContainer: Container
{
public RepositoriesContainer()
{
For<IAccountRepository>().Use<SqlAccountRepository>();
//...
}
}
StructureMapControllerFactory
класс отвечает за внедрение зависимостей в контроллер.Как я уже сказал, он должен знать, где найти эти зависимости (я имею в виду конкретные классы, такие как реализации сервисов и репозиториев).
У меня есть отдельная библиотека классов с именем MySite.Data
, где живут все детали реализации.Контракты, вроде IAccountRepository
, живут в библиотеке MySite.Contracts
.Теперь, если я ссылаюсь на эту библиотеку MySite.Data
непосредственно из проекта MVC, между моим сайтом и реализацией его поиска данных будет зависимость.Вопрос в том, как я могу это удалить?Каковы лучшие практики в этой ситуации?
Я уверен, что у нее есть куча обходных путей, просто я еще не нашел.