Я пытался заставить ninject работать в wcf, используя расширение wcf и перехват с расширением dynamicproxy2. Я в основном создал атрибут Time, и все это работает в базовом сценарии. У меня возникают проблемы, когда в модуле ninject я создаю привязку службы с аргументом конструктора:
Bind<IMyDependency>().To<MyDependency>();
Bind<IService1>().To<Service1>().WithConstructorArgument("dependency", Kernel.Get<IMyDependency>());
Все работает нормально, но атрибут Time не срабатывает ни для чего в моем Service1 или MyDependency.
Атрибут времени является стандартным, циркулирующим по всему Интернету. Единственным другим фрагментом кода на самом деле является метод CreateKernel — это global.asax, который выглядит следующим образом:
protected override IKernel CreateKernel() {
IKernel kernel = new StandardKernel(
new NinjectSettings() { LoadExtensions = false },
new WcfNinjectModule(),
new DynamicProxy2Module()
);
return kernel;
}
Спасибо за любую помощь!
Мэтт
РЕДАКТИРОВАТЬ 12/12/2011: В соответствии с просьбой я добавил некоторые подробности ниже: Весь модуль wcf ninject:
public class WcfNinjectModule : NinjectModule
{
public override void Load()
{
Bind<IMyDependency>().To<MyDependency>();
Bind<IService1>().To<Service1>();
}
}
Метод создания ядра в файле global.asax описан выше, а файл global.asax наследуется от NinjectWcfApplication.
Метод обслуживания выглядит следующим образом:
public class Service1 : IService1
{
private IMyDependency _dependency;
public Service1()
{
}
public Service1(IMyDependency dependency)
{
_dependency = dependency;
}
[Time]
public virtual string GetData(string value)
{
return string.Format(_dependency.GetMyString(), value);
}
}
public interface IMyDependency
{
string GetMyString();
}
public class MyDependency : IMyDependency
{
[Time]
public virtual string GetMyString()
{
return "Hello {0}";
}
}
Это помогает?
После удаления аргумента WithConstructor атрибут перехвата времени будет срабатывать для GetMyString, но не для GetData.
Мэтт
.WithConstructorArgument("dependency", Kernel.Get<IMyDependency>());
?. Ninject сам найдет зависимость. Если это не поможет, можете ли вы добавить полную проблему, а не только ее части. - person Remo Gloor   schedule 11.12.2011