2013-05-06 110 views
0

假設我想要通過ProxyFactory創建實例,我需要能夠傳遞該工廠的構造函數參數列表。從激活上下文中獲取構造函數參數

public class Foo : ViewModelBase 
{ 
    public Bar MyBar { get; private set; } 

    [Inject] 
    public Foo(Bar bar) 
    { 
     MyBar = bar; 
    } 
} 

這是我目前的模塊,它需要擴展傳遞的依賴關係,因爲他們會被ninject拆分爲ProxyFactory裏

public class InjectionModuleForConstructorArgsTest : NinjectModule 
{ 
    public override void Load() 
    { 
     ViewModelProxyFactory proxyFactory = new ViewModelProxyFactory(); 
     Bind<Foo>().ToMethod(
     ctx => 
     { 
      return proxyFactory.CreateViewModelProxy<Foo>(); 
     }); 
    } 
} 

基本上,我想要實現的是的自動化如下:

Bind<Foo>().ToMethod(
ctx => 
{ 
    return proxyFactory.CreateViewModelProxy<Foo>(Kernel.Get<Bar>()); 
}); 

任何想法,如果這是可能的?

+1

答案是要麼Ninject.Extensions.Factory或編輯解釋爲什麼構造,這不是足夠的 – 2013-05-06 19:57:16

+0

嗯,實際上它**是一個我可以忍受的解決方案(我已經使用它了),但我想掌握ActivationContext並希望找到更通用的方法......我將檢查你提到的工廠擴展(+1) – 2013-05-07 07:41:55

回答

2

在這種情況下,我想reccomend實施ViewModelProxyFactoryProvider<Foo>和注入Bar到的provider

public class ViewModelProxyFactory<T> : Provider<T> 
{ 
    public ViewModelProxyFactory(Bar bar) { this.bar = bar; } 

    public T CreateInstance(IContext ctx) 
    { 
     return putYourFactoryCodeHere 
    } 
} 

Bind<Foo>().ToProvider<ViewModelProxyFactory<Foo>>(); 
+0

謝謝雷莫,這聽起來不錯。我會放棄它,稍後再回來! – 2013-05-07 11:13:59

+0

現在我仔細看了一下,我不認爲這是我需要的。 ProxyFactory應該添加更改通知功能到任何類中。這種工廠方法意味着我必須爲每個我想要裝飾的課程創建一個工廠。我需要一個通用的方法。謝謝,無論如何,+1指向我這個! – 2013-05-07 11:34:23

+0

在這種情況下,您應該更詳細地解釋您在該工廠所做的工作。 – 2013-05-07 12:57:02