我是DI概念的新手,也是结构图的新手。我正在尝试完全填充我的所有接口都在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
我想使用默认约定,并避免将每个接口注册到类。
答案 0 :(得分: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扫描后认为它需要这个命名空间并且它已经开始工作。
我的问题已经解决,但我不知道出了什么问题,或者这是不是正确的方法。任何帮助仍将非常感谢。