来自xml的Ninject依赖项绑定

时间:2013-09-30 11:13:13

标签: c# c#-4.0 dependency-injection ninject

Ninject内核绑定就像你所知道的那样。

kernel.Bind<IMyService>().To<MyService>();

我想从xml获取MyService。像这样的WebConfig或App.Config。

<add key="service" value="MyNamespace.MyService">

我可以在代码中获取此字符串。但我怎么用呢

kernel.Bind<IMyService>().To<???>();

或者Niniject可以支持默认吗?

5 个答案:

答案 0 :(得分:6)

您可以使用非通用To(Type)重载。

从app.config获取类型:

string service = ConfigurationManager.AppSettings["service"];
Type serviceType = AssemblyContainingYourType.GetType(service);

使用类型:

kernel.Bind<IMyService>().To(serviceType);

所有人都说,请理解Ninject鼓励您在代码中配置绑定,而不是依赖配置文件。

答案 1 :(得分:3)

我没有在我的任何项目中使用它,但是Ninject xml扩展可能会有所帮助。

https://github.com/ninject/ninject.extensions.xml/wiki

<module name="myXmlConfigurationModule">
    <bind service="MyNamespace.IMyService, MyAssembly"
          to="MyNamespace.MyServiceImplementation, MyAssembly" />
    <bind service="MyNamespace.IMyOtherService, MyAssembly"
          to="MyNamespace.MyOtherServiceImplementation, MyAssembly" />
</module>

但不确定,是否可以将其存储在App.config文件中。

答案 2 :(得分:2)

Ninject内核绑定是这样的: -

像下面这样创建XML: -

<module name="myXmlConfigurationModule">
    <bind service="MyNamespace.IMyService, MyAssembly"
          to="MyNamespace.MyServiceImplementation, MyAssembly" />
    <bind service="MyNamespace.IMyOtherService, MyAssembly"
          to="MyNamespace.MyOtherServiceImplementation, MyAssembly" />
</module>

然后代码: -

using Ninject;

    enter code here

     class ABC
        {
          public void CallingMethodUsingNinject()
            {
               private IKernel kernel= new StandardKernel();
               kernel.Load("yourXmlFileName.xml");
               bool ismodule = kernel.HasModule("myXmlConfigurationModule");//To Check The module 
               if(ismodule )
               {           
               IMyService MyServiceImplementation = kernel.Get<IMyService>();
               MyServiceImplementation.YourMethod();
               }
           }
       }

由于XML文件属性设置,您可能会面临一些问题,因此需要更改您的xml文件设置。 激活IMyService时出错没有匹配的绑定可用,并且该类型不可自我绑定。 解决方案: - 不要忘记将复制设置为输出 此xml文件的目录属性如果更新则复制,以便可以将其复制到 输出目录自动

更多信息:-read https://www.packtpub.com/sites/default/files/9781782166207_Chapter_02.pdf

答案 3 :(得分:0)

终于得到了解决方案不要忘记将此文件的xml文件的Directory属性的Copy to Output设置为Copy for new,以便可以自动将其复制到输出目录。 for more

答案 4 :(得分:0)

您可以尝试:

<form id="load_filters_form">
  ..
</form>

<?php
  var_dump($_GET); // values from <form>
?>

<!-- AJAX, jQuery -->
<script>
  $("#load_filters_form").submit(function(event){

    event.preventDefault();

    $.ajax({

      type: 'get',
      data: $(this).serialize()
      success: function() {
        $("#load_filters_form")[0].reset(); 
      }

    });

  });
</script>