LightInject和自动属性实例化

时间:2019-03-21 16:30:12

标签: c# .net dependency-injection

前一段时间,我从事一个我认为使用LightInject的项目。我不再具有访问权限,所以我不能只是去找自己。似乎一旦实例化了ServiceContainer,就会触发所有程序集的反射,并自动实例化特定接口类型的任何属性。像这样:

包含记录器类的C#类库;记录器是应该注入的东西。

namespace TestLightInject {
    class Program {
        private static ServiceContainer container;
        static void Main(string[] args) {
            container = new ServiceContainer();
            //container.EnableAnnotatedPropertyInjection();
            container.Register<ILogger, Logger>();
            //container.RegisterPropertyDependency<ILogger>((factory, propertyInfo) => new Logger());

            var worker = new Worker();
            worker.DoSomething();
        }
    }

    public class Worker {
        //[Inject]
        ILogger logger { get; set; } = null;  // THIS IS THE PROPERTY THAT NEEDS TO BE SET
        public Worker() { }
        public void DoSomething() { logger.Log("It works!"); }
    }
}

一个引用类库的C#控制台应用程序。一些似乎没有帮助的事情被注释掉了。

public Worker() { logger = Program.container.GetInstance<ILogger>(); }

我想我可以允许公众访问服务容器,并将Worker ctor更改为类似

for row in rdd.toLocalIterator():

但是,如果自动实例化任何ILogger属性,则更为简单。

是否可以使用LightInject做到这一点,还是其他DI框架做到了?还是我只是在想象这一切?

0 个答案:

没有答案