【问题标题】:How to call a method after creating the instance in Ninject?在 Ninject 中创建实例后如何调用方法?
【发布时间】:2016-01-20 06:45:34
【问题描述】:

我想在使用 Ninject 创建的实例之后进行初始化。
我写了以下代码:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IHardwareService>().To<HardwareServiceClient>().InRequestScope().OnActivation(client =>
    {
        InitializeServiceHeader(); // never execute
        client.ChannelFactory.Endpoint.Behaviors.Add(new IncludeClientData());
    });
}

我希望InitializeServiceHeader(); 在以下代码之后调用:

var instance = new StandardKernel().Get<HardwareServiceClient>();

但从来没有InitializeServiceHeader(); 打电话。
应该怎么做?

【问题讨论】:

    标签: c# dependency-injection ninject ioc-container


    【解决方案1】:

    在这种情况下,InitializeServiceHeader() 不会被调用,因为类型绑定是针对 IHardwareService 的。

    如果你有一个名为 HardwareServiceTest 的类,并且它的构造函数有一个 IHardwareService 类型的参数

    public Class HardwareServiceTest
    {
        public HardwareServiceTest(IHardwareService serv)
        {
           //do something with serv;
        }
    }
    

    在这种情况下,调用,

    new StandardKernel().Get&lt;HardwareServiceTest&gt;()

    将触发对 InitializeServiceHeader() 的调用。

    【讨论】:

    • 那么,我应该如何定义绑定来调用InitializeServiceHeader
    • 我之前在手机中输入的答案格式不正确。我已经更新了它。请看看现在是否更有意义。 :)
    • 只有当 Ninject 需要解析 IHardwareService 时才会触发你的类型绑定逻辑
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多