【问题标题】:StructureMap exception: No Default Instance defined for PluginFamilyStructureMap 异常:没有为 PluginFamily 定义默认实例
【发布时间】:2010-02-18 01:38:32
【问题描述】:

我在 CoreService 项目中定义了一个 SysMsgManager 类,如下所示:

public class SysMsgManager 
{
    private ISysMsgRepository _SysMsgRepository;

    public SysMsgManager()
    {
        _SysMsgRepository = ObjectFactory.GetInstance<ISysMsgRepository>();
    }

    ....
}

在我的 DataAccess 项目中,我有“ISysMsgRepository”接口和两个具体实现,定义如下:

namespace DataAccess.Repository
{
   [Pluggable("Default")]
   public class SysMsgRepository : ISysMsgRepository
   {
      ...
   }
}

namespace DataAccess.Repository
{
    [Pluggable("Stub")]
    public class SysMsgRepository_Test : ISysMsgRepository
    {
        ...
    }
}

这就是我的 StructureMap.config 文件中的内容

<StructureMap>

<Assembly Name="CoreService" /> 
<Assembly Name="DataAccess" />

<PluginFamily
    Assembly="DataAccess"
    Type="DataAccess.Repository.ISysMsgRepository"
    DefaultKey="Default" />

</StructureMap>

当我尝试运行我的应用时,出现以下错误:

StructureMap 异常代码:202\n没有为 PluginFamily DataAccess.Repository.ISysMsgRepository、DataAccess、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null 定义默认实例

谁能帮我解决这个问题?谢谢!

【问题讨论】:

  • 我知道这不是解决这个特定问题的方法,但确保课程是公开的也修复了这个错误

标签: structuremap


【解决方案1】:

不幸的是,我对通过 Xml 配置 StructureMap 不太熟悉。让我向您展示它是如何使用 C# 完成的。

var container = new Container(config=>
{
  config.For<ISysMsgRepository>().Use<SysMsgRepository>();
});

您似乎在为接口和类使用标准命名约定(只是在类名前面添加一个 I)。如果你对所有类型都这样做,你可以像这样配置你的容器:

var container = new Container(config=>
{
    config.Scan(scan =>
    {
        scan.TheCallingAssembly();
        scan.WithDefaultConventions();
    });
});

我希望这会有所帮助。使用代码而不是 XML 配置容器要容易得多。试试看。你会成为一个皈依者。

【讨论】:

  • 我已将以下代码添加到 public SysMsgManager() var container = new Container(config => { config.For().Use(); }); _SysMsgRepository = ObjectFactory.GetInstance();仍然有同样的错误。
  • 感谢您的帮助。我最终得到了 CastleWindsor 的一切工作。我认为有一次我可以使用您发布的代码。但我仍然想通过 XML 进行配置。
  • 您究竟需要通过 XML 做什么?只是好奇我们在 StructureMap 中缺少什么。
  • 18 个月后我成为了一名转换者。
  • 很高兴您喜欢 DSL 而不是 XML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多