4

我試圖設置攔截來處理Ninject,我們一直使用它作爲我們的依賴注入框架。Ninject攔截動態代理問題

我已經從NuGet下載了攔截擴展,並試用了Castle Dynamicproxy實現和LinFu實現,但無法與我們的應用程序一起工作。

在沒有無參數構造函數的類上創建代理時,Castle發生錯誤,因爲所有服務對象都通過構造函數注入了它們的依賴項,這是一個問題。錯誤是:

System.ArgumentException:無法實例化類的代理:emedia.RapidSystems.Subscriber.Presenters.RRSubmissionPresenter。 找不到無參數的構造函數。 參數名稱:,構造函數

的李林甫攔截器更好地工作,直到,直到代碼調用一個泛型參數的方法,然後它給了我下面的:

System.ArgumentException:泛型類型無效。 參數名:MethodInfo的

這裏是我試圖攔截類的一個簡化版本代碼:

[LogCalls] 
public class Repository<T> : IRepository<T> 
     where T : class 
{ 
    public virtual T GetEntity<TKey>(ObjectContext context, TKey key) 
    { 
     var entity = GetEntity(context, key, _emptyLoadingStrategy); 
     return entity; 
    } 

    public virtual IQueryable<T> GetAll(ObjectContext context) 
    { 
     var query = GetAll(context, _emptyLoadingStrategy); 
     return query; 
    } 

    public virtual T Add(ObjectContext context, T entity) 
    { 
     context.AddObject(EntitySetName(context), entity); 
     return entity; 
    } 

    //other code goes here 

} 

添加和GETALL做工精細,但錯誤發生時,GetEntity被呼籲代理。

在這一點上我卡住了,因爲攔截器都不能與代碼庫一起工作。有沒有人有Ninject攔截工作與一個真正的複雜生產系統,而不是一個簡單的演示課,如果是的話如何?只要它有效,我不介意使用哪個攔截器。或者是與Ninject攔截還不夠成熟,我是否需要考慮用Unity等其他東西替代整個事物?

回答

3

使用版本3.0.0-rc2。它增加了對動態代理接口代理的支持

+2

我試圖從NuGet下載它根本沒有運行,並給出一個錯誤「Method not found:'System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type )」。」 無論如何,我無法在生產環境中使用預發佈版本,所以我想答案是它還不夠成熟,我必須等到版本3才真正發佈。 – Mant101 2012-01-16 11:47:05