2016-05-17 6 views
0

APIをASP.NETコアに移行します。私は、ASP.NETのコアプロジェクトでIServiceProviderと二行目(IUnitOfWorkの登録)を再生する方法を見つけ出すことはできませんIoCContainerからIServiceProviderへの移行

public static void Register(HttpConfiguration config) 
{ 
    ... 

    var container = IoCContainer.Instance; 

    container.RegisterType<IEventStoreUnitOfWork<IDomainEvent>, EventStoreUnitOfWork<IDomainEvent>>(new ContainerControlledLifetimeManager()); 
    container.RegisterInstance(typeof (IUnitOfWork), container.Resolve<IEventStoreUnitOfWork<IDomainEvent>>()); 

    ... 
} 

:私の古いプロジェクトでは、私はこのようなサービスの登録を持っています。私が理解していないのは、container.Resolve<IEventStoreUnitOfWork<IDomainEvent>>のようなものを作る方法です。

+0

1つの解決策は、 'IEventStoreUnitOfWork '(例えば、' MyDomain:IEventStoreUnitOfWork ')からクラスを継承し、それに対してResolveを使用することです。 –

+0

@OrelEraki - 私はまだ理解していないレガシープロジェクトに取り組んでいますが、IEventStoreUnitOfWork を継承する別のクラスを作ることは何を意味していますか?どうすればそれを使うことができますか? – alexxjk

+0

二番目の行はシングルトンですか?またはスコープ(ライフタイムを要求) – Tseng

答えて

0

私はあなたのコードが行うべきこと(あなたの登録)を理解していません。

最初の行にシングルトンを登録して、2行目のトランジェントに似ているようですが、シングルトンとして登録されているので、常に同じ値を返します。では、2行目は何をすべきでしょうか?

ファクトリメソッドをお探しですか?

public static void Register(IServiceCollection services) 
{ 
    services.AddSingleton<IEventStoreUnitOfWork<IDomainEvent>,EventStoreUnitOfWork<IDomainEvent>>(); 
    // AddScoped = request-lifetime, AddTransint = instantiate on each resolve 
    services.AddScoped<IUnitOfWork>(provider => provider.RequestService<IEventStoreUnitOfWork<IDomainEvent>>(); 
} 

AddXxxメソッドの2番目のオーバーロードを使用すると、ファクトリメソッドを提供するために、デリゲートを使用することができます。デリゲートに渡されるパラメータはIServiceProviderIServiceCollectionから作成された後のコンテナ)ですので、RequestService(ASP.NETコアResolveメソッド)を呼び出して解決型を返すことができます。

+0

ありがとうございました!私のコードはちょっと奇妙に見えますが、これはレガシープロジェクトだと言いました。私はこれをASP.NET Coreに短期間で移す必要があります。あなたのソリューションはまさに私が探していたものです! – alexxjk

+0

最初の行では2行目が廃止されましたか?つまり、 'IUnitOfWork'を解決すると、' IEventStoreUnitOfWork を解決すると同じ**インスタンスを取得するので、 'services.AddSingleton >();'は同じ結果になります、 右? – Tseng

+0

実際、何らかの理由で、プロジェクトの一部のサービスでIUnitOfWorkインターフェイスとIEventStoreUnitOfWork が使用されています。まだ彼らはすべて同じインスタンスに依存しています...そして、私は今何か変更を加えることをためらっています。 – alexxjk

関連する問題