代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

依赖注入和ASP.NET MVC有问题

  •  1
  • Pure.Krome  · 技术社区  · 15 年前

    ILoggingService 贪婪的构造函数需要 String . 此值将是控制器的完全限定名。。或者一些文字(如果太难的话)。

    例如当前代码。。

    public AccountController(IAccountService accountService,
        ILoggingService loggingService) { ... }
    

    public AccountController(IAccountService accountService,
        ILoggingService loggingService(this.GetType().ToString()
        .. or hardcod "X.Y..AccountController")
    { ... }
    

    这可能吗?我想我可能需要在注册表/引导中定义一些棘手的东西?

    请帮忙!

    3 回复  |  直到 15 年前
        1
  •  1
  •   Josh Bush    15 年前

    你能把iLogingService变成通用的吗?然后你可以要求 ILoggingService<AccountController>

    您的日志服务可以这样使用它:

    class LoggingService<T> : ILoggingService<T>{
       ...
       var thingName=typeof(T).ToString();
       ...
    }
    
        2
  •  0
  •   Mark Seemann    15 年前

    DI和松耦合的一个要点是协作者只能通过接口了解彼此。如何创建实例与消费者无关。

    任何 实现ILoggingService,否则将破坏Liskov替换原则。

    但是,有时您需要将使用者的某些方面传达给依赖项,但这最好以方法参数的形式完成—例如,您可以将有问题的字符串作为参数传递给ilogginservice中的方法。

        3
  •  0
  •   queen3    15 年前

    注意,这不是IoC特有的解决方案。我不是国际奥委会的专家(虽然我使用温莎),所以他们可能会提供手动实例化的方法。有点像

    ioc.ForComponent(typeof(ILoggerService)).CustomInstantiate((type, desttype) => 
         Activator.CreateInstance(type, new object[]{desttype.Name}))
    
    • 但对此我一无所知。特别是考虑到您希望IoC不仅提供要创建的类型,而且还提供要使用实例的类型。