2015-09-25 56 views
2

我正在使用Unity(DI)將我的註冊服務注入到我的控制器中。使用Unity有條件地注入依賴關係

控制器

public class RenewalController : Controller 
{ 
    private readonly IRegistrationService _registrationService; 
    private readonly IRenewalTypedFactory _renewalFactory; 

    public RenewalController(IRegistrationService registrationService, IRenewalTypedFactory renewalFactory) 
    { 
     _renewalFactory = renewalFactory; 
     _registrationService = registrationService; 
    } 

    // GET: Renewal 
    public ActionResult Renew() 
    { 
     return View(); 
    } 

統一配置

container.RegisterType<IRegistrationService, RegistrationService>(new PerRequestLifetimeManager()); 

已經有一個註冊服務不過現在我不得不創造出壓倒一切的方法的更新服務類。

public class RenewalService : RegistrationService, IRegistrationService 
{ 
    ... 
} 

我怎麼告訴我的統一配置在我續訂服務注入了我的IRegistrationService,只有當我的控制器要求呢?

我知道Ninject你會做這樣的事情:

.WhenInjectedInTo(typeof(RenewalController)); 

而且我已經閱讀了這個問題,但不能讓我的頭周圍,或將其應用到我的例子:

How to conditionally bind a instance depending on the injected type using unity?

+0

爲什麼你不能創建另一個接口IRenewalService並使用它? –

+0

Unity有一個選項可以指定一個名稱,例如'container.Register (「name1」)'。然後你可以通過調用'container.Resolve (「name1」)'來獲得特定的註冊。要將其應用於MVC,您需要自定義MVC的工作流程。或谷歌,可能有人已經這樣做。 – ieaglle

+2

@ieaglle不需要定製MVC,還有一個'[Dependency(「」)]'屬性 –

回答

1

告訴什麼依賴它應該注入容器RenewalController

container.RegisterType<RenewalController>(new InjectionConstructor(
      new ResolvedParameter<RenewalService>(), 
      new ResolvedParameter<IRenewalTypedFactory>()));