SORU
11 Mayıs 2010, Salı


ResolverOverride ile Gidermek Nasıl kullanılır?birlik 2.0:

Daha fazla ve daha fazla çalışmak Unity ile başladım. Çözümleyici yöntem aldığını fark ettimparametrelerbağımsız değişkenResolverOverride.

Biri bana kullanabileceğim nasıl bir örnek verebilirimResolverOverrideya da bana daha fazla ipucu alabileceğim başka bir kaynak noktası.

CEVAP
12 Mayıs 2010, ÇARŞAMBA


Fark ettiğiniz gibi bu bir yeni (ve gerçekten harika bir özelliği) Birlik 2. Bu özellik izin verin

  • parametreleri sınıf gidermek an yapıcı olur. Yeni İnjectionConstructor) türü kayıt esnasında anda yalnızca bir değer ayarlayabilirsiniz birlik 1(...)

ParameterOverride : ResolverOverride yoktur

Sağlayan ResolverOverride bir sınıf adlandırılmış bir parametre geçirildi geçersiz kılar kurucu.

  • DependencyOverride : ResolverOverride bağımlılıkları ile aynı

Değeri geçersiz kılan bir sınıf bir olduğunda enjekte bağımlılık verilen tür, bu içinde bulunduğu yere bakılmaksızın grafik nesnesi.

  • PropertyOverride : ResolverOverride ile özellikleri aynı

Sağlayan bir ResolverOverride belirli bir özellik değeri geçersiz kılar.

Örnek

using System;
using Microsoft.Practices.Unity;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {

            var container = new UnityContainer();

            //ParameterOverride example

            container.RegisterType<IConcreteService, ConcreteService>(
                new InjectionConstructor(7) //Old way to pass value to constructor - not flexible. 
                                            //All resolved (without ovverride wich aapears only in unity 2.0) classes will hav val=7
                );

            var service0 = container.Resolve<IConcreteService>();
            Console.WriteLine(service0.Val); //prints 7

            var service = container.Resolve<IConcreteService>(new ParameterOverride("val", 3));
            Console.WriteLine(service.Val); // prints 3

            var service2 = container.Resolve<IConcreteService>(new ParameterOverride("val", 5));
            Console.WriteLine(service2.Val); // prints 5

            Console.ReadLine();

            //DependencyOverride example

            var b0 = container.Resolve<B>(new DependencyOverride<IConcreteService>(new ConcreteService(42)));
            Console.WriteLine(b0.Service.Val); //print 42
            Console.WriteLine(b0.Service1.Val); //print 42

            var b = container.Resolve<B>(new DependencyOverride<IConcreteService>(new ConcreteService(-42)));
            Console.WriteLine(b.Service.Val); // print -42
            Console.WriteLine(b.Service1.Val); // print -42

            Console.ReadLine();

            //PropertyOverride example 

            var b1 = container.Resolve<B>(new PropertyOverride("Service", new ConcreteService(42)), 
                new PropertyOverride("Service1", new ConcreteService(-42)));
            Console.WriteLine(b1.Service.Val); //print 42
            Console.WriteLine(b1.Service1.Val); //print -42

            Console.ReadLine();



        }
    }

    public interface IConcreteService {
        int Val { get; set; }
    }
    public class ConcreteService : IConcreteService {

        public int Val { get; set; }

        public ConcreteService(int val) {
            Val = val;
        }
    }

    public class B {
        [Dependency]
        public IConcreteService Service{ get; set; }

        [Dependency]
        public IConcreteService Service1 { get; set; }

    }
}

Bu konuda sessizliğini koruyor neden hiçbir fikrim yok.

Tırnak Birlik kaynak kodu xml belgeleri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Droid Life

    Droid Life

    17 Kasım 2009
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • Maschine Tutorials

    Maschine Tut

    15 ŞUBAT 2011

İLGİLİ SORU / CEVAPLAR