public static void Main(string[] args) { ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType <Interceptor>(); builder.RegisterType <Dependency>().As <IDependency>(); builder.RegisterType <Final>().As <IFinal>(); builder.Register <IFinal>((c, p) => { IDependency dependency = c.Resolve <IDependency>(); int runtimeArgument = p.Named <int>("runtimeArgument"); return(new Final(dependency, runtimeArgument)); }).As <IFinal>() .EnableInterfaceInterceptors() .InterceptedBy(typeof(Interceptor)); builder.Register <Factory>((c, p) => { Factory.FactoryMethod finalObjectFactoryMethod = c.Resolve <Factory.FactoryMethod>(); return(new Factory(finalObjectFactoryMethod)); }).As <IFactory>() .EnableInterfaceInterceptors() .InterceptedBy(typeof(Interceptor)); IContainer container = builder.Build(); IFactory factory = container.Resolve <IFactory>(); IFinal final = factory.GetFinalObject(42); final.Test(); }
/// <summary> /// Poistaa tehdasmetodin. /// </summary> /// <typeparam name="T">Oliotyyppi</typeparam> /// <param name="tag">Tagi</param> /// <param name="method">Poistettava tehdasmetodi</param> public void RemoveFactory <T>(string tag, Factory.FactoryMethod method) { Factory.RemoveFactory <T>(tag, method); }
/// <summary> /// Luo tehdasmetodin tietylle tyypille ja tagille. /// </summary> /// <typeparam name="T">Oliotyyppi</typeparam> /// <param name="tag">Tagi</param> /// <param name="method">Metodi joka palauttaa olion</param> public void AddFactory <T>(string tag, Factory.FactoryMethod method) { Factory.AddFactory <T>(tag, method); }