Ninject с WCF и перехватом (для AOP) - PullRequest
2 голосов
/ 09 декабря 2011

Я пытался заставить девятку работать в 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

1 Ответ

0 голосов
/ 12 декабря 2011

После небольшой работы (и написания этой последней записи) выясняется, что простое удаление метода WithConstructorArgument решило мою проблему, и теперь все, кажется, работает нормально.

Мэтт

...