6

如您所知,Ninject 内核绑定就是这样。

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

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

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

我可以在代码中得到这个字符串。但是我该如何使用它

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

或者 Niniject 可以默认支持这个吗?

4

5 回答 5

6

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

从您的 app.config 中获取类型:

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

使用类型:

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

总而言之,请理解这Ninject鼓励您在代码中配置绑定,而不是依赖配置文件。

于 2013-09-30T11:55:00.370 回答
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 文件中。

于 2013-09-30T12:22:33.463 回答
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文件的Copy to Output Directory属性设置为Copy if newer,以便可以自动将其复制到输出目录

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

于 2014-12-26T12:18:00.633 回答
0

终于得到解决方案不要忘记将此文件的“复制到输出”的xml文件目录属性设置为“如果较新则复制”,以便可以自动将其复制到输出目录。更多

于 2014-12-24T15:54:33.203 回答
0

你可以试试:

Bind<IClientChannelFactory<ICustomerServiceChannel>>()
  .To<ClientChannelFactory<ICustomerServiceChannel>>() 
  .WithConstructorArgument("endpointConfigurationName", ServiceBinding);
于 2019-03-26T12:32:01.687 回答