Tek Fotoluk İpucu 64 – Assembly Adresinden Object Üretmek

Merhaba Arkadaşlar,

Bazen reflection tekniklerini kullanarak harici assembly’ lar içerisinden bulduğumuz tiplerin örneklerini ürettirme ihtiyacı duyabiliriz. Bunun için kullanabileceğimiz pek çok yol vardır aslında. Örneğin tipin bulunduğu Assembly dosya adresini tutan bir string değişken üzerinden dahi istenilen nesne örneğinin üretilmesini sağlayabiliriz. Nasıl mı? Winking smile

spt_64

Bir başka ip ucunda görüşmek dileğiyle.

Yorumlar (6) -

  • işte tam bunu arıyordum.süper oldu teşşekkürler. Bu Tek fotoluk İpuçları tam öğle arası için vitaminli Laughing kolay gelsin hocam
  • Rica ederim. İşinize yaradıysa ne mutlu bana Smile
  • Hocam selam, extension metodumuz object tipinde değil de örneklediğimiz tipte geri dönebilirmi ? Yani Employee den instance alınmışsa Employee dönse Product  instance alınmışsa Product dönse. Generic olarak yapılabilirmi?  
  • Denemedim şu anda ama sanırım Activator.CreateInstance' de generic kullanamadığımdan dolayı object terchi etmiştim. O kısımda sorun olabilir belki.
  • Selam Burak Hocam,

    Her paylaşımınız benim için adeta bir puzzle parçası. Son zamanlarda çalışmalarımda paylaşmış olduğunuz bu puzzle parçalarını birleştirerek çok güzel şeyler ortaya çıkardım.

    Teşekkürler.

  • Bu yazıdan esinlenerek yapmış olduğum şeyide okuyucu arkadaşlarla paylaşmak istiyorum.
    EF Code First de context nesnenizin içerisinde "OnModelCreating" methodu içerisinde Domain nesneleri için hazırlanan mapping(Configuration) nesnelerinin dinamik olarak eklenmesini sağlıyoruz.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                Type configType = typeof (UserMap);
                var typeToRegister = Assembly.GetAssembly(configType).GetTypes()
                    .Where(type => !string.IsNullOrEmpty(type.Namespace))
                    .Where(type =>type.BaseType != null && type.BaseType.IsGenericType &&
                        type.BaseType.GetGenericTypeDefinition() == typeof (BaseEntityMap<>));

                foreach (var map in typeToRegister)
                {
                    dynamic configurationInstance = Activator.CreateInstance(map);
                    modelBuilder.Configurations.Add(configurationInstance);
                }
            }

Yorum ekle

Loading