Я в основном согласен с ответом Криса, но я думаю, что файлы конфигурации не очень удобны (особенно для Unity), поэтому вот решение, которое позволит вам использовать конфигурацию во время выполнения без циклических ссылок. Мы собираемся сделать это с реестрами.
Создайте проект инфраструктуры, который будет содержать IConfigureUnity.
public interface IConfigureUnity
{
public void Configure(UnityContainer container);
}
Каждый из ваших проектов библиотек классов будет отвечать за реализацию этого интерфейса для регистрации своих собственных классов.
public class RegistryForSomeClassLibrary : IConfigureUnity
{
public void Configure(UnityContainer container)
{
container
.RegisterType<IObjectContext, ObjectContextAdapter>()
.RegisterType<IConnectionStringProvider, ConnectionStringProvider>()
.RegisterType(typeof(IRepository<>), typeof(Repository<>));
}
}
Тогда в вашем проекте WPF вам нужно будет создать контейнер и применить эти реестры.
var container = new UnityContainer();
new RegistryForSomeClassLibrary().Configure(container);
new RegistryForAnotherClassLibrary().Configure(container);
Теперь у вас есть полностью настроенный экземпляр контейнера без каких-либо файлов конфигурации.