C# SimpleInjector惰性泛型注册

C# SimpleInjector惰性泛型注册,c#,simple-injector,C#,Simple Injector,我正在处理一些旧的asp.net web表单页面,并试图让DI正常工作,但遇到了一些未创建对象的问题,因此我的目标是在代码隐藏中执行一个延迟实现 我在网站的其余部分进行了以下注册: container.Register(typeof(IDataFactory<,>), new[] { typeof(SqlAccountFactory).Assembly }); container.Register(typeof(IDataFactory),new[]{typeof(SqlAccou

我正在处理一些旧的asp.net web表单页面,并试图让DI正常工作,但遇到了一些未创建对象的问题,因此我的目标是在代码隐藏中执行一个延迟实现

我在网站的其余部分进行了以下注册:

container.Register(typeof(IDataFactory<,>), new[] { typeof(SqlAccountFactory).Assembly });
container.Register(typeof(IDataFactory),new[]{typeof(SqlAccountFactory.Assembly});
为了得到我尝试过的懒惰的一面

container.Register<Lazy<IDataFactory<SqlAccountFactory, int>>>(
            () => new Lazy<IDataFactory<SqlAccountFactory, int>>(
                container.GetInstance<IDataFactory<SqlAccountFactory, int>>));
container.Register(
()=>新懒虫(
container.GetInstance);
这样做的结果是不会填充属性

页的代码隐藏中的属性(如上所述,在不使用Lazy时此选项有效):

[依赖关系]
公共项目代码还原;
作为参考,我使用文档中的代码来填充代码后面用属性标记的属性,并且除了上面的惰性注册之外,所有工作都很好


有人能帮助我或发现我做了什么傻事吗?

Simple Injector的
IPropertySelectionBehavior
仅对属性有效。但是,您定义的是公共字段,而不是属性。如果将其更改为以下内容,它可能会开始工作:

[Dependency]
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository { get; set; }
这确保了C#编译器在您将属性放在字段上时会显示编译错误


长话短说,这与依赖关系懒惰无关。

解决了我的问题,我在尝试修复注册时弄坏了属性。添加属性将在将来防止它;谢谢但是请注意,依赖项通常是一个
惰性的
,这是一个坏主意。对象的创建应该非常快,因为CTOR只需存储它们的依赖项。
[Dependency]
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository { get; set; }
[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
public sealed class DependencyAttribute : Attribute { }