我在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
任何人都可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:8)
不幸的是,我对通过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来配置容器要容易得多。试试看。你将成为一名皈依者。