Как связать мой интерфейс с конкретным классом в другой сборке?
В моем решении есть следующие проекты:
Foo.Data
Foo.Domain
В Структурной карте Я добавляю свои два имени сборки в файл StructureMap.config, а затем используя атрибуты PluginFamily и Pluggable, сопоставьте мои интерфейсы с моим конкретным классом.
Как выполнить одно и то же с Ninject?
Я сделаю пару предположений здесь.
Простейшей задачей Ninject является создание нового класса в Foo.Data, который происходит из Ninject StandardModule:
internal class BarModule : StandardModule {
public override void Load() {
Bind<IBar>()
.To<BarClass>();
}
}
Затем этот класс устанавливает привязку для запросов IBar к конкретному классу BarClass. Это ваш XML-эквивалент.
Следующий шаг - создать ядро Ninject (иначе называемое "контейнером" ) и предоставить ему этот модуль (т.е. эту конфигурацию). Там, где вы это делаете, во многом зависит от того, какое приложение вы создаете. В общих чертах вы, как правило, настраиваете ядро в точке логической точки входа или "запуска" вашего кода. Если это консольное приложение или настольное приложение Windows, это, вероятно, будет одной из первых вещей, которые выполняет функция main().
Код хотел бы:
var modules = new IModule[] {
new BarModule()
};
var kernel = new StandardKernel(modules);
В этот момент, когда вы делаете что-то вроде этого:
var barObj = kernel.Get<IBar>()
Переменная barObj ссылается на экземпляр BarClass.
Все сказанное, я вполне мог не иметь полного понимания всех нюансов вашего приложения - например, сборки загружаются динамически и т.д. Надеюсь, что это хоть какая-то помощь.