我一直在使用StructureMap了一段时间,但现在我根本不是一个专家。 我的问题很简单,我想通过代码(注册)来配置SM创建一个存储库对象的实例时使用特定的构造函数。
这里是我的2层构造(注既不是贪婪)。
public BusinessUnitRepository( IDatabase database )
: base( database ) {
}
public BusinessUnitRepository( IDatabaseFactory factory )
: base( factory ) {
}
注:第一个构造函数将实例IDatabase
接口,并通过基类的构造函数(IDatabaseFactory)实现调用。
我正在试图做的是配置SM使用第二个构造函数和提供的实例DatabaseFactory
从SM容器。 我不能使用[DefaultConstructor]
在将组件属性BusinessUnitRepository
被限定为使得关闭此选项的表。
我的注册代码
ForRequestedType<IDatabaseFactory>()
.CacheBy( InstanceScope.PerRequest )
.TheDefaultIsConcreteType<DatabaseFactory>();
ForRequestedType<Repository.IBusinessUnitRepository>()
.CacheBy( InstanceScope.PerRequest )
.TheDefault.Is.OfConcreteType<BusinessUnitRepository>().CtorDependency<IDatabaseFactory>().Is<DatabaseFactory>();
当我运行程序SM抛出试图创建的实例时302错误BusinessUnitRepository
。
StructureMap.StructureMapException: StructureMap Exception Code: 302
There is no argument of type Repository.LinqToSql.IDatabaseFactory for concrete type Repository.LinqToSql.BusinessUnitRepository
供参考:
- 如果我在Repository.LinqToSql.BusinessUnitRepository集引用StructureMap和使用[缺省构造函数]属性我IDatabaseFactory构造一切完美。
- 此外,我已经证实,StructureMap确实包含一个配置“Repository.LinqToSql.DatabaseFactory”