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

5

我对DI概念和Structuremap都不熟悉。我正在尝试实现这样的场景,即我的所有接口都在AssemblyA中,而所有实现都在AssemblyB中。我想使用Structuremap在构造函数中注入AssemblyB类的实例,该构造函数依赖于AssemblyA中的接口。

public class Customer(ICustomerService)
{

}

ICustomerService 接口在 AssemblyA 中,而 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

我希望使用默认规则,避免将每个接口注册到一个类中。

1个回答

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的类程序集,然后它开始工作 :) - Afraz Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接