Я пытался заставить девятку работать в 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;
}
Спасибо за любую помощь!
Matt
EDIT12/12/2011: В соответствии с просьбой, я добавил некоторые дополнительные подробности ниже: Весь модуль ninc для wcf:
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.
Matt