簡體   English   中英

以非通用方式綁定Ninject Factory Extension之后的異常

[英]Exception after Binding Ninject Factory Extension in non generic way

我有以下代碼:

public interface ILogging
{ ... }

public interface ILoggingFactory
{
  ILogging CreateLogging();
}

public class MailSender : IMailSender
{
  [Inject]
  public MailSender(ILoggingFactory loggingFactory)
  {
    ...
  }
}

當我試圖綁定我的工廠時

Bind<ILoggingFactory>().ToFactory();

一切都很好。 否則,當我以非通用方式嘗試時

Bind(myType).ToFactory();

我得到一個InvalidCastException

無法將類型為“Castle.Proxies.ObjectProxy”的對象強制轉換為“MyLibrary.ILoggingFactory”

嘗試加載使用logginFactory的郵件發件人時:

kernel.Get<IMailSender>();

更新:

我使用反射的解決方法:

MethodInfo bindMethodInfo = GetType().GetMethods()
  .First(one => one.Name == "Bind" &&
  one.IsGenericMethod).MakeGenericMethod(mType);
var bindMethodResult = bindMethodInfo.Invoke(this, null);

MethodInfo toFactoryMethodInfo = typeof(Ninject.Extensions.Factory.BindToExtensions).GetMethods()
  .First(one => one.Name == "ToFactory" && one.IsPublic && one.IsGenericMethod &&   
  one.GetParameters().Count() == 1)
  .MakeGenericMethod(mType);

toFactoryMethodInfo.Invoke(bindMethodResult, new[] { bindMethodResult });      

評論:出於項目原因,我想以非通用的方式綁定工廠。

如果你使用

Bind(myType).ToFactory();

Ninject為工廠類型Object而不是ILoggingFactory創建代理對象。 您還必須另外指定工廠類型:

this.kernel.Bind(typeof(ILoggingFactory)).ToFactory(typeof(ILoggingFactory));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM