Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ninject绑定_C#_Ninject - Fatal编程技术网

C# Ninject绑定

C# Ninject绑定,c#,ninject,C#,Ninject,如何将我的接口绑定到不同程序集中的具体类 我的解决方案中有以下项目: 食物数据 Foo.Domain 在结构映射中,我将我的两个程序集名称添加到StructureMap.config文件中,然后使用PluginFamily和Pluggable属性将我的接口映射到我的具体类 如何用Ninject完成同样的事情?我在这里做几个假设 在Foo.Domain项目中有一个名为IBar的接口,在Foo.Data项目中有一个名为BarClass的具体类 实际上,您在Foo.Data项目中引用了Foo.Doma

如何将我的接口绑定到不同程序集中的具体类

我的解决方案中有以下项目:

食物数据
Foo.Domain

在结构映射中,我将我的两个程序集名称添加到StructureMap.config文件中,然后使用PluginFamily和Pluggable属性将我的接口映射到我的具体类


如何用Ninject完成同样的事情?

我在这里做几个假设

  • 在Foo.Domain项目中有一个名为IBar的接口,在Foo.Data项目中有一个名为BarClass的具体类
  • 实际上,您在Foo.Data项目中引用了Foo.Domain项目,因为BarClass实现了IBar
  • 使用Ninject最简单的方法是在Foo中创建一个新类。从Ninject的StandardModule派生的数据:

    internal class BarModule : StandardModule {
      public override void Load() {
        Bind<IBar>()
          .To<BarClass>();
      }
    }
    
    此时,当您执行以下操作时:

    var barObj = kernel.Get<IBar>()
    
    var barObj=kernel.Get()
    
    变量barObj引用了BarClass的一个实例


    总而言之,我可能无法完全理解应用程序的所有细微差别——例如,程序集是动态加载的,等等。希望这能有所帮助。

    解决方案中的项目是否同时包含接口和具体类?您是希望将它们绑定到一个消费解决方案/项目中还是在这个解决方案本身中?另外,您使用的是哪个版本的Ninject?@Peter接口在我的域中,具体类在数据层中。我只是想在解决方案中绑定。我还考虑在同一个项目中的seprate文件夹中执行此操作,而不是按项目将域和数据层分离。我正在使用Ninject 1.0作为紧凑的框架。虽然有点晚了,但这是一个非常可靠的回答,谢谢Peter。
    var barObj = kernel.Get<IBar>()