2017-10-17 90 views
1

我正在使用一些旧的asp.net网页形式页面,并试图让DI工作,但遇到了一些问题,一些对象没有被创建,所以我的目的是在后面的代码中执行一个懒惰的实现。SimpleInjector惰性通用注册

我有以下登记在该网站的其他工作:

container.Register(typeof(IDataFactory<,>), new[] { typeof(SqlAccountFactory).Assembly }); 

为了让懒方面我都试过

container.Register<Lazy<IDataFactory<SqlAccountFactory, int>>>(
      () => new Lazy<IDataFactory<SqlAccountFactory, int>>(
       container.GetInstance<IDataFactory<SqlAccountFactory, int>>)); 

这样做的结果是,该属性没有得到填充。

属性,代码页的背后(高于此描述不使用懒惰时有效):

[Dependency] 
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository; 

仅供参考我使用的代码的文档来填充代码屁股属性标记属性和所有的作品都很好,禁止上面的懒注册。

是否有人能够帮助或发现我做过的傻事?

回答

1

简单喷油器的IPropertySelectionBehavior只适用于属性。你所定义的是公共领域,而不是财产。如下

[Dependency] 
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository { get; set; } 

这是明智的,以纪念您DependencyAttribute以这样一种方式,它仅支持特性,通过与AttributeUsageAttribute标记它:如果您将其更改为以下,它可能会开始工作

[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)] 
public sealed class DependencyAttribute : Attribute { } 

这确保了如果将属性放在字段上,C#编译器将显示编译错误。长话短说,它与懒惰依赖没有任何关系。

+0

解决了我的问题,我纠正了试图修复注册的财产。添加AttributeUsage将会在将来阻止它;谢谢! –

+0

请注意,依赖关系通常是一个糟糕的主意,因为它是'懒惰的'。对象的创建应该非常快,因为ctors不应该只是存储它们的依赖关系。 – Steven