2013-07-16 1 views
0

У меня есть проект MVC4, в котором я использую Ninject как DI Framework. Проблема, с которой я столкнулась, заключается в попытке разделить мои привязки DI от моей реализации, поскольку я не хочу, чтобы мой основной веб-проект ссылался на все мои другие проекты.Загрузка unreferted dll MVC Ninject

Я попытался создать отдельный проект под названием привязок, который содержит Ninject модули:

public class WebModuleBindings : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IStaticDataRepository>().To<StaticDataRepository>(); 
    } 
} 

Я затем загрузить эту DLL динамически в моем веб-проекта:

kernel.Load(bindingDll); 

Это прекрасно работает, когда я запускаю он локально, но когда я использую msbuild и развертываю мое приложение, DLL проекта привязок не включается, поскольку в нем нет ссылки.

Каков наилучший способ решить эту проблему?

+0

Почему вы не добавляете его в качестве ссылки на проект, а 'Copy Local' установлен в' true'? В любом случае, это, несомненно, потому, что сборка не развертывается в правильной папке. Этот процесс развертывания должен учитывать это. –

+0

Если я добавлю ссылку на проект привязки, веб-проект косвенно ссылается на каждый проект, что означает, что ни один другой проект не может ссылаться на мой веб-проект из-за циклических ссылок. Это обычное дело? – TJF

ответ

1

Ваш веб-проект - это проект-хозяин. В качестве принимающего проекта ответственность веб-проекта заключается в обеспечении предоставления всех DLL. Это облегчило бы развертывание

+0

Если я добавлю ссылку на проект привязки, веб-проект косвенно будет ссылаться на каждый проект, что означает, что ни один другой проект не может ссылаться на мой веб-проект из-за циклических ссылок. Это обычное дело? – TJF

+0

Это, веб-проект является отправной точкой, поэтому веб-проект должен ссылаться на другие проекты не по-другому. только в задних случаях вам нужно ссылаться на веб-проект, событие в этом случае обычно можно реорганизовать код (перемещая его в отдельную сборку), чтобы у вас не было ссылок на веб-проект. –

+0

Спасибо за ваши советы – TJF

2

Нет круговой зависимости, если у вас есть Bootstrapper. Ваш поток зависимости будет выглядеть примерно так:

Web Project 
    | 
    |_______________- Bootstrapper project. All of your Ninject Bindings, etc. 
    |     The Kernel is also created here and passed back to the 
    |     Web project. 
    |         | 
    |         | 
    ▼         | 
Business Layer -------------------------- 
    |         | 
    |         | 
    |         | 
    ▼         | 
Data Access Layer ----------------------- 

         Possibly a dangling Entities/POCO project here 

По существу, ваш загрузчик - ваш корень композиции. Он может ссылаться на каждую другую сборку, чтобы иметь доступ ко всем интерфейсам/конкретным реализациям, которые требуются для привязок, и т. Д. Затем ваш веб-проект ссылается как на Bootstrapper, так и на следующий уровень вниз. Это уменьшает ваши зависимости и может немного скомпоновать структуру кода.