1

Jimmy Bogartが、IoCコンテナでのAutomapperの使用に関する記事を掲載しています。彼はStructureMapを使用した例を持っていますが、私はUnityを使用しており、InjectionConstructorを適切に使用する方法がわかりません。

以下は記事からのコードであり、それは私の貧弱な試みです。誰かがこれを正しく行う方法を教えてもらえますか?

public class ConfigurationRegistry : Registry
{
    public ConfigurationRegistry()
    {
        ForRequestedType<Configuration>()
            .CacheBy(InstanceScope.Singleton)
            .TheDefault.Is.OfConcreteType<Configuration>()
            .CtorDependency<IEnumerable<IObjectMapper>>().Is(expr => expr.ConstructedBy(MapperRegistry.AllMappers));

        ForRequestedType<IConfigurationProvider>()
            .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>());

        ForRequestedType<IConfiguration>()
            .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>());
    }
}

私の試み:

  container.RegisterType<IConfiguration, Configuration>(new SingletonLifetime())
                    .Configure<InjectedMembers>()
                        .ConfigureInjectionFor<Configuration>(
                            new InjectionConstructor(typeof(IEnumerable<IObjectMapper>)), MapperRegistry.AllMappers);
4

1 に答える 1

1

これは私がやったことです:

       IEnumerable<IObjectMapper> allMappers = new List<IObjectMapper>() { 
            new TypeMapMapper(TypeMapObjectMapperRegistry.AllMappers()),
            new StringMapper(),
            new FlagsEnumMapper(),
            new EnumMapper(),
            new ArrayMapper(),
            new DictionaryMapper(),
            new EnumerableMapper(),
            new AssignableMapper(),
            //new TypeConverterMapper(),
            new NullableMapper(),
        };

        container.RegisterType<Configuration>(new SingletonLifetime())
                        .Configure<InjectedMembers>()
                            .ConfigureInjectionFor<Configuration>(
                                new InjectionConstructor(allMappers));

    container.RegisterType<IConfigurationProvider, Configuration>();
    container.RegisterType<IConfiguration, Configuration>();
    container.RegisterType<IMappingEngine, MappingEngine>();

これは機能しますが、他の誰かがより良い実装をしている場合、私はすべて耳を傾けており、これにはまだ賞金があります。

于 2009-07-30T00:40:11.503 に答える