使用Structuremap从多个程序集中依赖注入

Afr*_*Ali 5 structuremap dependencies dependency-injection

我是DI概念的新手,也是结构图的新手.我正在尝试完全填充我的所有接口都在其中AssemblyA并且我的所有实现都在的场景AssemblyB.我想使用Structuremap AssemblyB在依赖于接口的构造函数中注入类的实例AssemblyA

public class Customer(ICustomerService)
{

}
Run Code Online (Sandbox Code Playgroud)

ICustomerServiceAssemblyACustomerService班级在assemblyB.我希望Structuremap CustomerService在此构造函数中注入实例.我假设如果类的名称与前缀为和的接口名称相同I.Structuremap将自动识别它.

我写了以下配置.

 x =>
        {


            x.Scan(scan =>
                {
                    scan.Assembly("AssemblyA");
                    scan.Assembly("AssemblyB");
                    scan.TheCallingAssembly();
                    scan.WithDefaultConventions();
            });
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

StructureMap Exception Code:  202
No Default Instance defined for PluginFamily AssemblyA.ICustomerService, AssemblyA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Run Code Online (Sandbox Code Playgroud)

我想使用默认约定,并避免将每个接口注册到类.

Afr*_*Ali 1

好吧,我已经开始工作了,但我现在更困惑了。

这段代码似乎有效

IContainer container = new Container(c =>
            {
                c.Scan(x =>
                {
                    x.Assembly("AssemblyA");
                    x.Assembly("AssemblyB");
                    x.IncludeNamespace("AssemblyA");
                    x.TheCallingAssembly();
                    x.WithDefaultConventions();
                });
            });
Run Code Online (Sandbox Code Playgroud)

这里我简单地添加了 x.IncludeNamespace("AssemblyA"); 在 AssemblyB 扫描认为它需要这个命名空间并且它已经开始工作之后。

我的问题已解决,但我不知道出了什么问题,也不知道这是否是正确的方法。任何帮助仍然将不胜感激。