【发布时间】:2012-04-02 20:17:24
【问题描述】:
我正在使用 Ninject Factory Extension 并创建 wiki 中解释的自定义实例提供程序:
class UseFirstArgumentAsNameInstanceProvider : StandardInstanceProvider
{
protected override string GetName(System.Reflection.MethodInfo methodInfo, object[] arguments)
{
return (string)arguments[0];
}
protected override Parameters.ConstructorArgument[] GetConstructorArguments(System.Reflection.MethodInfo methodInfo, object[] arguments)
{
return base.GetConstructorArguments(methodInfo, arguments).Skip(1).ToArray();
}
}
我已经定义了以下工厂接口:
interface IFooFactory
{
IFoo NewFoo(string template);
}
我创建了以下绑定:
kernel.Bind<IFooFactory>().ToFactory(() => new UseFirstArgumentAsNameInstanceProvider());
kernel.Bind<IFoo>().To<FooBar>().Named("Foo");
现在,当我调用以下命令时,我将得到一个 FooBar 的实例:
var foobar = fooFactory.NewFoo("Foo");
这一切都很好。然而,我想要的是更像这样的东西:
interface IFooTemplateRepository
{
Template GetTemplate(string template);
}
我有一个存储库,它将根据名称(“Foo”)返回一个模板,我想将模板作为构造函数参数传递。
public class FooBar
{
public FooBar(Template template)
{
}
}
这可能吗?我不确定什么应该依赖于 ITemplateRepository。
【问题讨论】:
标签: ninject ninject-extensions