2009-07-31 10 views
1

少しの学習曲線です。あなたの知り合いの一人が私を助けることができます。サブソニックシンプルなレポジトリと依存性注入

私はSubSonic(SimpleRepository)とStructureMapを調べています。本当に両方の周りに私の頭を得ることを試みる。

私はSimpleRepositoryを使用して使いやすさを向上させ、最初にDB構造を取り除くか作成するのではなく、モデルをデータベースに定義させたいと考えています。

私はSimpleRepository

public class DataRepository : SimpleRepository 
{ 
    public DataRepository() : 
     base("Application", SimpleRepositoryOptions.RunMigrations) 
     { } 
} 

から継承する具象クラスを作成するには、私のアプリケーションの初期化

ObjectFactory.Initialize(
    x => x.ForRequestedType<DataRepository>() 
     .TheDefaultIsConcreteType<DataRepository>() 
     .CacheBy(InstanceScope.Hybrid)); 

にこれを追加して、今、私はどこでもアプリで、私は同じSimpleRepositoryを使用することを確信しています。

私はこれをあまりにも複雑にしていますか?または私はここで正しい道にいる。私はあなたが他のすべての詳細を知っていないことを知っているので、一般的にも私に話してください。ありがとう。

+0

あなたはDimeCasts.netを見たことがありますか http://www.dimecasts.net/Casts/ByTag/StructureMap – Podge

+0

Thanks Podge私が持っています。私はもっ​​と学ぶためにもう一度見ます。私は上記で概説したモデルを使用してきました。私が気付くことができた実際のパフォーマンスヒットはありません。アプリは今後数週間で本格化する予定だ。そのことからもっと学ぶことができるだろう。 – roberocity

答えて

1

ここでは、DIのコアアイデアの1つが欠けていると思います。そのアイデアは、実際にその機能を実装している具体的なクラスから呼び出しコードを抽象化するためのインターフェイスの使用です。

public interface IDataRepository { } 

internal class DataRepository : SimpleRepository, IDataRepository 
{ 
} 

ObjectFactory.Initialize(
    x => x.ForRequestedType<IDataRepository>() 
     .TheDefaultIsConcreteType<DataRepository>() 
     .CacheBy(InstanceScope.Hybrid)); 

すべてのクライアントコードでは、IDataRepositoryインターフェイスのみを解決または参照する必要があります。

+0

ありがとうございます。私はインターフェイスとDIの関係を見ています。そして、内部のDataRepositoryクラスのアイデアのように。 本当に自分のコードはそれほど変わっていません。それは、それがインタフェースしてから後で変更する能力を加える。 私の本当の疑問は、私が必要とされているSimpleRepositoryをどのようにインスタンス化していたのかということでした。 SimpleRepositoryからクラスを派生させ、コンストラクターを使って正しいSimpleRepositoryを取得し、DIを使用してすべてをまとめます。 – roberocity

+0

答えとしてa * long * time agoを選択しないと申し訳ありません。 – roberocity