【问题标题】:Dependency Injection from Multiple Assemblies using Structuremap使用 Structuremap 从多个程序集进行依赖注入
【发布时间】:2012-12-17 23:19:03
【问题描述】:

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

public class Customer(ICustomerService)
{

}

ICustomerServiceAssemblyA 中,CustomerService 类在 assemblyB 中。我希望 Structuremap 在此构造函数中注入 CustomerService 实例。我假设如果类的名称与前缀为和I 的接口名称相同。 Structuremap 会自动识别。

我写了如下配置。

 x =>
        {


            x.Scan(scan =>
                {
                    scan.Assembly("AssemblyA");
                    scan.Assembly("AssemblyB");
                    scan.TheCallingAssembly();
                    scan.WithDefaultConventions();
            });

但它给了我错误

StructureMap Exception Code:  202
No Default Instance defined for PluginFamily AssemblyA.ICustomerService, AssemblyA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

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

【问题讨论】:

    标签: dependency-injection dependencies structuremap


    【解决方案1】:

    好的,我让它工作了,但我现在更困惑了。

    这段代码似乎可以工作

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

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

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

    【讨论】:

    • 好的,我能够理解发生了什么。我有多个类在我正在扫描的不同程序集中实现接口。这会产生我在问题中报告的原始错误。如果在所有扫描程序集中只有一个类满足 SM 的默认约定,我在问题中发布的代码应该可以正常工作。我很遗憾没有早点解决它,但希望它可以帮助任何人敲他的头。一旦我添加了 x.IncludeNamespace("AssemblyA");线基本上我过滤了 SM 的类程序集,它开始工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多