質問

私は実装リポジトリのパターンが持続ある。リポジトリの実装のみ相互作用する私の体物 IUnitOfWorkITable<T> インタフェースそれにより、データを用いた IUnitOfWork な再利用がを表します。これまで、私は実装-メモリなどのLinq to Sqlのバージョンの IUnitOfWorkITable<T>.

私の問題である。 IUnitOfWork 注射のリポジトリで終わる必要ないインスタンスを生成する新しい IUnitOfWork がんのリポジトリを使用します。この作品がプラグイン可能なようにやってきたことをこに何かが間違っている。一般の利用パターンのようなこと:

FooUnitOfWork unitOfWork = new FooUnitOfWork();
Repository repos = new Repository(unitOfWork);
// ...act upon repos
unitOfWork.Save();

現在必要とすることその他のパターンを毎リポジトリのビジネスの成長をサポートアプリを取得し、正しいユニットの事例メモリ,L2Sます。

何が最適なパターン。 私た ファウラーの議論の話題 なの事例に見えるというクリーンです。いさわりごこち"をつくる量の抽象としているのはスコア以上の差を感じましたような建物の他の間接指定のようしております。

現在、私は学習に向けて何らかのアプリの全プロバイダを設定でき、正しい IUnitOfWork.私のオフベースは何が必要かを真に実施することがagnostic?

役に立ちましたか?

解決

更新: こん壊ればかりの製造貧しい人のIoCます。当社が取り替えるだけですべてのことが、この

UnitOfWorkFactory.Create();

の一般化 共通のサービスロケータ 実施:

Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IUnitOfWork>();

させることができる作成図書館利用依存性注射に強いることなくすべてのユーザーになるIoCの枠組み


かまを使用する必要があります非常に簡単な工場まで設定する事が可能で、コールバック?になりますので注意してくださいセットのstaticメソッドでこのように:

public static class UnitOfWorkFactory
{
    private static Func<IUnitOfWork> FactoryMethod;

    public static IUnitOfWork Create()
    {
        if (UnitOfWorkFactory.FactoryMethod == null)
        {
            throw new InvalidOperationException("...");
        }

        return UnitOfWorkFactory.FactoryMethod();
    }

    public static void SetFactoryMethod(Func<IUnitOfWork> factory)
    {
        UnitOfWorkFactory.FactoryMethod = factory;
    }
}

はこの休みには、下記のうちどれですか。

他のヒント

私はあなたが使用Vistorパターン発見の実装がIUnitOfWorkインターフェース。

[UnitOfWork(Name="foo")]
public class FooUnitOfWork : IUnitOfWork {}

Repository repo = new Repository("foo");
//stuff happens
repo.Save(); //or repo.Worker.Save();

内側のポインスタンスを発見工場では、労働者を作成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top