インスタンスを返す前に、ファクトリ クラスで少し作業を行う必要があるため、次のようなファクトリ メソッドがあります。
public Foo Create(string bar, IEnumerable<SomeMetaData> metaData)
{
var meta = new ObservableCollection<AnotherType>(
metaData.Select(e => new AnotherType { ... }).ToList());
return Create(new ConstructorArgument("bar", bar),
new ConstructorArgument("metaData", meta));
}
具体的なファクトリ クラスは、ベース ファクトリから派生します。これにより、実際の配線は省かれますIResolutionRoot
。
public abstract class FactoryBase<T> where T : class
{
private IResolutionRoot _resolutionRoot;
protected FactoryBase(IResolutionRoot resolutionRoot)
{
_resolutionRoot = resolutionRoot;
}
protected T Create(params IParameter[] parameters)
{
return _resolutionRoot.Get<T>(parameters);
}
}
(誰かがコメントしたい場合は、この抽象クラスについて CodeReview に質問があります: https://codereview.stackexchange.com/questions/25038/are-there-side-effects-to-having-a-generic-ninject -工場)
問題は、NinjectModule で、特定の具象FooFactory
クラスを使用するように Ninject に指示する方法がわからないことです。
Bind<IFooFactory>().ToFactory(); // uses an abstract factory that doesn't do what I need
Bind<IFooFactory>().ToFactory<FooFactory>(); // doesn't build
私が必要としているのは次のようなものだと思います:
Bind<IFooFactory>().ToFactory<FooFactory>(Func<FooFactoryInstanceProvider>);
これを提供するにはどうすればよいInstanceProvider
ですか? おそらくそれは私の誤解にすぎませんが、 http: //www.planetgeek.ch/2011/12/31/ninject-extensions-factory-introduction/ はこれについて曖昧すぎるFunc<T>
と思います。
私はこれを思いついた:
public class FooFactoryInstanceProvider : StandardInstanceProvider
{
protected override Type GetType(MethodInfo methodInfo, object[] arguments)
{
return typeof(FooFactory);
}
}
ここまでは順調ですね?次のステップは何ですか?