gpt4 book ai didi

c# - 以非通用方式绑定(bind) Ninject Factory Extension 后出现异常

转载 作者:行者123 更新时间:2023-11-30 15:29:26 26 4
gpt4 key购买 nike

我有以下代码:

public interface ILogging
{ ... }

public interface ILoggingFactory
{
ILogging CreateLogging();
}

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

当我尝试将我的工厂绑定(bind)为

Bind<ILoggingFactory>().ToFactory();

一切正常。否则,当我以非通用方式尝试时

Bind(myType).ToFactory();

我得到一个 InvalidCastException

Unable to cast object of type 'Castle.Proxies.ObjectProxy' to type '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)工厂。

最佳答案

如果你使用

Bind(myType).ToFactory();

Ninject 为工厂类型 Object 而不是 ILoggingFactory 创建了一个代理对象。您必须另外指定工厂类型:

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

关于c# - 以非通用方式绑定(bind) Ninject Factory Extension 后出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23737861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com