1

レジストリにデフォルトの具象型が定義されています。

    ForRequestedType<IXRepository>()
        .TheDefaultIsConcreteType<CacheXRepository>();

ChaceXRepositoryには次のコンストラクターがあります。

パブリッククラスCacheXRepository:IXRepository {

    public CacheXRepository(IXRepository xRepository,ICache cacheService){

コンストラクターでは、それ自体と同じインターフェイスタイプを持つオブジェクトを受け取りますが、別の具象タイプを渡したいと思います。

タイプがCacheXRepositoryの場合、パラメーターIXRepositoryの具体的なタイプをXRepositoryにし、それ以外の場合はIXRepositoryをCacheXRepositoryに解決する必要があることをレジストリで定義するにはどうすればよいですか。

4

2 に答える 2

2

enrichwithメソッドを確認する必要があります。その場合、コードは次のようになります。

      ForRequestedType<IXRepository>().TheDefault.Is
            .OfConcreteType<XRepository>()
            .EnrichWith(
            (context, repository) =>
            new CacheXRepository(repository));

詳細については、このページをご覧ください:http ://codebetter.com/blogs/jeremy.miller/archive/2008/01/27/interception-techniques-in-structuremap-2-5.aspx

于 2010-03-08T13:42:25.033 に答える
0

(testetではなく)のようなものはどうですか:

ForRequestedType<IXRepository>()
  .TheDefaultIsConcreteType<CacheXRepository>()
  .WithCtorArg("xREpository")
  .EqualTo(new XRepository());

私はそのStructuremap方言にあまり精通していません:)

私が使用しているバージョンでは、次のようになります。

For<IXRepository>()
  .Use<CacheXRepository>()
  .CtorDependency<IXRepository>("xRepository")
  .IsConcreteType<XRepository>();
于 2010-03-08T13:44:38.703 に答える