说我的几个控制器构造函数都采用一个接口-IPetInterface
IPetInterface有3种具体的实现。
您如何配置StructureMap以根据需要它的控制器提供具体的实现之一。
粗略的例子....
class DogStuff: IPetInterface{}
class CatStuff: IPetInterface{}
class GiraffeStuff: IPetInterface{}
class DogController : Controller
{
DogController(IPetInterface petStuff)
// some other stuff that is very unique to dogs
}
class CatController : Controller
{
CatController(IPetInterface petStuff)
// some other stuff that is very unquie to cats
}
最佳答案
使用问题中提供的类和接口,此注册将执行以下操作:
For<DogController>().Use<DogController>()
.Ctor<IPetInterface>("petStuff").Is<DogStuff>();
For<CatController>().Use<CatController>()
.Ctor<IPetInterface>("petStuff").Is<CatStuff>();
For<GiraffeController>().Use<GiraffeController>()
.Ctor<IPetInterface>("petStuff").Is<GiraffeStuff>();
如果它增长到超过3个具有相同模式的注册,我会考虑使用基于约定的注册,而不是根据命名自动为每个控制器注册一个相应的“东西”。这可以通过using an IRegistrationConvention实现。
关于c# - MVC3和StructureMap,基于 Controller 注入(inject)具体类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5819744/