Ninject 与 WCF 和拦截(用于 AOP)

发布于 2024-12-20 22:33:05 字数 1814 浏览 1 评论 0原文

我一直在尝试让ninject在wcf中工作,使用wcf扩展和使用dynamicproxy2扩展进行拦截。我基本上已经创建了一个时间属性,并使其在基本场景中正常工作。我遇到麻烦的是,在 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中的create kernel方法,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 上触发。

马特

I've been trying to get the ninject working in wcf, using the wcf extension and the interception with dynamicproxy2 extension. I've basically created a Time attribute and have it all working in a basic scenario. Where I get trouble is when in ninject module I create my service binding with a constructor argument:

Bind<IMyDependency>().To<MyDependency>();
Bind<IService1>().To<Service1>().WithConstructorArgument("dependency", Kernel.Get<IMyDependency>());

Everything works fine, but the Time attribute wont fire on anything in my Service1 or MyDependency.

The time attribute is the standard one floating all over the internet. The only other piece of code really is the CreateKernel method is the global.asax, which looks like this:

protected override IKernel CreateKernel() {
    IKernel kernel = new StandardKernel(
        new NinjectSettings() { LoadExtensions = false }, 
        new WcfNinjectModule(), 
        new DynamicProxy2Module()
    );
    return kernel;
}

Thanks for any help!

Matt

EDIT 12/12/2011: As requested, I've added some more detail below:
The entire wcf ninject module:

public class WcfNinjectModule : NinjectModule
{

    public override void Load()
    {
        Bind<IMyDependency>().To<MyDependency>();
        Bind<IService1>().To<Service1>();
    }
}

The create kernel method in the global.asax is above, and the global.asax inherits from NinjectWcfApplication.

Service method looks like this:

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}";
    }
}

Does this help?

Since removing the 'WithConstructor' argument, the time intercept attribute will fire on GetMyString but not on GetData.

Matt

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眉黛浅 2024-12-27 22:33:05

经过更多的工作(并编写最后的帖子编辑)后,事实证明,仅删除 WithConstructorArgument 方法确实解决了我的问题,现在一切似乎都工作正常。

马特

After a little more work (and writing that last post edit), it turns out that just removing the WithConstructorArgument method did resolve my problem and everything now seems to be working fine.

Matt

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文