かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

WCF RIA ServicesでDomainServiceの生成処理をのっとる方法

System.ServiceModel.DomainServices.Server.IDomainServiceFactoryを継承したクラスを作ります。

public class MyDomainServiceFactory : IDomainServiceFactory
{
    public DomainService CreateDomainService(Type domainServiceType, DomainServiceContext context)
    {
        // どうにかして目的のドメインサービスを作成する
        // 引数にdomainServiceTypeで、どの型のドメインサービスを作成するかは
        // 渡ってきてるので、それを使う。
        DomainService ds = ........;
        ds.Initialize(context);
        return ds;
    }

    public void ReleaseDomainService(DomainService domainService)
    {
        // 何か、あれば解放処理
    }
}

こんなクラスを用意しておいてGlobal.asaxで以下のようにDomainServiceFactoryを差し替えてやればOKです。

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        // ファクトリの差し替え
        DomainService.Factory = new MyDomainServiceFactory ();               
    }

    // 途中省略

    protected void Application_End(object sender, EventArgs e)
    {
        // 一応後始末(必要なのかな?)
        DomainService.Factory = null; 
    }
}

これで何が出来るようになるかというと、ぱっと思いつくだけでもDomainServiceに対してMEFから依存性を注入したりといったことが出来るようになりそうです。
後は、オレオレDomainServiceの基本クラスを作って、それに応じた初期化処理を施すとか、夢ひろがりまくりんぐ。