para inyeccion ejemplo dummies dependencias control .net dependency-injection ioc-container structuremap nlog

.net - inyeccion - NLog: Inyección de dependencia para objetivos personalizados



inyeccion de dependencias spring (2)

El autor del kit de herramientas actualizó el marco para exponer los ganchos para usar su propio contenedor DI. El siguiente es un uso posible:

public class LoggingConfiguration : ILoggingConfiguration { public void SetDependencyResolver(IContainer container) { ConfigurationItemFactory.Default.CreateInstance = (Type type) => container.GetInstance(type); } } public static class DiagnosticsConfiguration { public static void Configure(Action<ILoggingConfiguration> configuration) { var config = new LoggingConfiguration(); configuration(config); } } public interface ILoggingConfiguration { void SetDependencyResolver(IContainer container); } public interface IContainer { object GetInstance(Type type); } public class StructureMapDependencyFactory : IContainer { public object GetInstance(Type type) { return ObjectFactory.GetInstance(type); } public T GetInstance<T>() { return ObjectFactory.GetInstance<T>(); } }

Espero que esto ayude a alguien.

J

Soy un usuario de NLog y estoy creando mi propio objetivo personalizado. Este objetivo usará algunos repositorios (usando NHibernate) para persistir las entradas de registro.

¿Es posible inyectar las dependencias de constructor requeridas de objetivos personalizados utilizando cualquier marco de trabajo de IoC, preferiblemente StructureMap?

Saludos,

J


Quiero proporcionar un contexto para las personas, ya que al principio estaba confundido por su respuesta JC.

public Program { // // Static constructor // static Program() { // Set up Ninject var kernel = new StandardKernel(); // Register bindings RegisterServices(kernel); // Set up Ninject logging config NLog.Config.ConfigurationItemFactory.Default.CreateInstance = (type) => kernel.TryGet(type); // Continue on! } private static void RegisterServices(IKernel kernel) { // bind services! kernel.Bind<IMyClass>().To<MyClass>(); } } [Target("Custom")] public class CustomTarget : TargetWithLayout { private IMyClass _myClass; public CustomTarget(IMyClass myClass) { // This will be injected! _myClass = myClass; } }

Esto muestra cómo configura la creación de la instancia y cómo encaja todo junto con NLog. Espero que ayude a otras personas!