Bitte beachten Sie den Code unten:Instanziierungsanwendung Typen AutoMapper mit einem DI-Container mit
public class Test : ITest
{
public ITest2 _iTest2;
public int _id;
public string _name;
public Test(ITest2 test2)
{
_iTest2 = test2;
}
}
public interface ITest
{
}
public class Test2 : ITest2
{
}
public interface ITest2
{
}
public class Test3 : ITest3
{
public int _id;
public string _name;
}
public interface ITest3
{
}
Ich habe folgende in meinem Global.asax:
Mapper.Initialize(m =>
{
m.CreateMap<DataLayer.Test3, BusinessLayer.Test>().ConstructUsing(opt => new BusinessLayer.Test(new BusinessLayer.Test2()));
});
ich die Typen in meinem Client-App abbilden Doing this:
cfg.CreateMap<DataLayer.Test3, BusinessLayer.Test>().ConstructUsing(opt => new BusinessLayer.Test(new BusinessLayer.Test2()));
Wie kann ich die Typen mit Castle Windsor zuordnen, anstatt das neue Schlüsselwort für Test verwenden zu müssen und Test2?
las ich eine andere Antwort und schlug jemand vor, dies zu tun:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Types.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn(typeof(IValueResolver<,,>)));
// container.Register(Types.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn<IValueResolver>());
container.Register(Types.FromThisAssembly().BasedOn<Profile>().WithServiceBase());
var profiles = container.ResolveAll<Profile>();
// Add your list of profiles to the mapper configuration here
Mapper.Initialize(m => {
m.ConstructServicesUsing(container.Resolve);
profiles.ToList().ForEach(p => m.AddProfile(p));
});
// I'm not sure about this as I haven't used AutoMapper for a while,
// but I assume you want to resolve the static mapper instance
container.Register(Component.For<IMapper>().Instance(Mapper.Instance));
}
Muss ich dies tun:
cfg.CreateMap<DataLayer.Test3, BusinessLayer.Test>().ConstructUsing(opt => new BusinessLayer.Test(new BusinessLayer.Test2()));
oder sollten die Typen zur Karte unter Verwendung dieser AutoMapper Lage:
cfg.CreateMap<DataLayer.Test3, BusinessLayer.Test>()
der obigen Konfiguration tatsächlich zu verwenden, was der Code sagt, ist: „Wenn Sie wollen, erstelle einen neuen Service, hol dir den Windsor Container ". Kurz vor der Verwendung der [Service Locator Anti-Pattern] (http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/) ist etwas wie das wahrscheinlich der Weg zu gehen. – stuartd
@stuartd, welche AutoMapper-Konfiguration ist erforderlich, um den oben genannten Code zu erhalten, z. B. Castle Windsor und AutMapper? – w0051977
Sorry, es ist zu lange her, seit ich das letzte Mal Castle benutzt habe, um mich an die Spitze meines Kopfes zu erinnern. – stuartd