Вы должны поместить NinjectModule внутри сборки домена (не веб-сборки), и вы можете указать ninject сканировать вашу сборку домена и искать модуль. Модуль - это просто класс, который наследуется от базового класса NinjectModule и реализует Load (). Таким образом, веб-проекту нужна только ссылка на проект домена. Сканирование должно выглядеть примерно так:
любой из этих двух: (на самом деле есть еще несколько вариантов, но это основные, которые я использую)
var assemblysToScan = "Assembly.*";
var assemblysToScan = new[] { "Assembly.Domain", "Assembly.Web" };
, а затем просто
kernel.Scan(x =>
{
x.From(assemblysToScan)
x.AutoLoadModules();
});
Если вы хотите разрешить объект, просто укажите его в качестве аргумента ctor, и если ninject управляет вашими объектами, он автоматически внедрит тип (на основе настроенных вами привязок).
EDIT:
добавить ссылки на ninjectcommonservicelocator (не могу вспомнить точное имя) & microsoft.practices.servicelocation
в вашем загрузчике добавьте:
using Microsoft.Practices.ServiceLocation;
using CommonServiceLocator.NinjectAdapter;
var locator = new NinjectServiceLocator(kernel);
ServiceLocator.SetLocatorProvider(() => locator);
тогда в вашем классе:
using Microsoft.Practices.ServiceLocation;
class CookieManager : ICookieManager
{
SecureObjectSerialiser secureObjectSerialiser;
CookieManager()
{
this.secureObjectSerialiser = ServiceLocator.Current.GetInstance<SecureObjectSerialiser>();
}
}
причина локатора microsoft.practices в том, что ваш код не должен знать, что ninject работает под прикрытием. вместо этого вы используете универсальный сервисный локатор, который можно использовать повторно при смене контейнеров.
лично я бы этого избегал и просто вводил все. но если вы не можете, вы не можете.