だから、私は非常に単純な C#/.Net インターフェイスを持っています。ただし、このインターフェイスを WinRT に公開する必要があります。だから、現時点ではこれらのインターフェースを持っています
//.Net (in the `Common` namespace)
public interface IWriter
{
void Write(string text);
}
//WinRT (in the `WinRT` namespace)
public interface IWriter
{
void Write(string text);
}
IWriter : Common.IWriter
WinRT に適した型を使用しているにもかかわらず、どうやらそれはうまくいきません。だから、今私は両方を実装する双方向ラッパーを書いています:
//WinRT
internal class WriterWrapper : Common.IWriter, IWriter
{
Common.IWriter CommonWriter;
IWriter WinRTWriter;
public WriterWrapper(IWriter writer)
{
WinRTWriter=writer;
}
public WriterWrapper(Common.IWriter writer)
{
CommonWriter=writer;
}
void Common.IWriter.Write(string text)
{
if(WinRTWriter == null)
{
CommonWriter.Write(text);
}else{
WinRTWriter.Write(text);
}
}
void IWriter.Write(string text)
{
((Common.IWriter)this).Write(text);
}
}
ただし、これは非常に醜く退屈です。また、必要な場所で使用すると、「無限」のオブジェクト グラフになります。
次のような .Net クラスがあるため、このインターフェイスが必要です。
//.Net (`Common` namespace)
public class Config
{
public IWriter Writer{get;set;}
}
このプロパティを WinRT に公開する最善の方法は、このオブジェクトをラップすることです。
//WinRT
public class Config
{
Common.Config CommonConfig;
public Config()
{
CommonConfig=new Common.Config();
}
public IWriter Writer
{
get
{
return new WriterWrapper(CommonConfig.Writer);
}
set
{
CommonConfig.Writer=new WriterWrapper(value);
}
}
}
したがって、誰かが新しいオブジェクトにアクセスするたびにWinRT.Config.Writer
、新しいオブジェクトが作成され、Config オブジェクトが範囲外になるまで解放されません。
どうすればこれを防ぐことができますか?これを行うための全体的なより良い方法はありますか?