说我的几个控制器构造函数都采用一个接口-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/

10-11 05:59