警告: Ninjectの調査を始めたばかりです。
次のように定義された汎用DomainObjectクラスがあります。
public abstract class DomainObject<T> : IDomainObject where T : IDomainObject
{
protected DomainObject(IDataProvider<T> dataProvider)
{
DataProvider = dataProvider;
}
// blah and blih
protected IDataProvider<T> DataProvider { get; private set; }
}
上記のコードでわかるように、これにDomainObject
は、への依存関係を表すコンストラクターがありIDataProvider<T>
ます。
私のNinjectモジュールでは、これがバインディングの方法です。metaDataは構成ストアから取得され、バインドする具体的なタイプを指定できます。
var medaData = DataContextDictionary.Items[type];
var genericDomainObjectType = typeof (DomainObject<>);
Type[] genericDomainObjectTypeArgs = { medaData.ObjectType };
var domainObjectType = genericDomainObjectType.MakeGenericType(genericDomainObjectTypeArgs);
Bind(domainObjectType).To(medaData.ObjectType);
var genericIDataProviderType = typeof (IDataProvider<>);
var iDataProviderType = genericIDataProviderType.MakeGenericType(genericDomainObjectTypeArgs);
Bind(iDataProviderType).To(medaData.DataProviderType);
これはうまく機能しますが、このコードは考案されており、より良い方法で記述できると思います。
Ninjectでそのような依存関係を表現するより良い方法はありますか?
ご協力いただきありがとうございます。