何が良いの作り方IObservableのための方法は?
-
25-09-2019 - |
質問
ということか、いままでのクラス:
public class Foo
{
public string Do(int param)
{
}
}
いを観察可能な価値観を作っているの い 方法。一文について教えてくださいするイベントを生成するためであるといわれるのか い -利用 の上昇を考慮して計算した。FromEvent の上昇を考慮して計算した。でもなんだかわからないと感じない制作のイベントだけのお酒です。あると良いのですか?
解決
Mattの答えは、私はこのことについて考えて作られます:
public class Foo
{
private readonly Subject<string> _doValues = new Subject<string>();
public IObservable<string> DoValues { get { return _doValues; } }
public string Do(int param)
{
var ret = (param * 2).ToString();
_doValues.OnNext(ret);
return ret;
}
}
var foo = new Foo();
foo.DoValues.Subscribe(Console.WriteLine);
foo.Do(2);
他のヒント
一般的に、あなたは被験者を使用しないようにしたいです。私の実務経験では、それはあなたが何かを間違ってやっているサインです。 Observable.Createまたはおそらく生成するには、通常、より良いフィットされます。
私はあなたが実際に私たちはより良い答えを提供できるかどうかを確認するためにやろうとしているものを見るために興味があります。 リー
私はあなたが一つの選択肢としてそれにイベントを追加する話をしているので、あなたは、Fooのクラスを制御すると仮定しています。あなたがクラスを所有しているので、あなたがメソッドの独自のIObservableの実装を定義することはできません何らかの理由があるのでしょうか?
public class Foo
{
DoObservable _doValues = new DoObservable();
public IObservable<String> DoValues
{
return _doValues;
}
public string Do(int param)
{
string result;
// whatever
_doValues.Notify(result);
}
}
public class DoObservable : IObservable<String>
{
List<IObserver<String>> _observers = new List<IObserver<String>>();
public void Notify(string s)
{
foreach (var obs in _observers) obs.OnNext(s);
}
public IObserver<String> Subscribe(IObserver<String> observer)
{
_observers.Add(observer);
return observer;
}
}
あなたのクラスが今メソッドから返された値をサブスクライブする方法を提供Observable<String>
プロパティがあります:
public class StringWriter : IObserver<String>
{
public void OnNext(string value)
{
Console.WriteLine("Do returned " + value);
}
// and the other IObserver<String> methods
}
var subscriber = myFooInstance.DoValues.Subscribe(new StringWriter());
// from now on, anytime myFooInstance.Do() is called, the value it
// returns will be written to the console by the StringWriter observer.
私は反応性フレームワークにあまり手を出していませんでしたが、私は、これはあなたがこれを行うだろうかに近いと思います。
Observable.Generateは、あなたの問題を解決します。これだけ)を作成し、対象と継続的ドイト(への呼び出しの結果を返します:
Observable.Generate (
new Foo(),
item => true, // in your example, this never terminates
item => item, // we don't actually do any state transitions
item => { return item.DoIt(); } // This is where we emit our value
);
実際には、多くの場合、いくつかの状態を追跡し、いくつかの終了条件を持つようにしたいです。簡単になりにそれを生成します。
私はEventAggregatorモデルになります。サンプルコードで素晴らしい記事があります表示されていることのStructureMapと実装ます。
http://www.codeproject.com/KB/architecture/event_aggregator.aspx の