0

我正在寻找一个可能的解决方案以下。Autofac。基础类属性解决没有特定的注入

我有一个基类有一个依赖,我目前使用属性注入来满足。

public class BaseClass { 
    IService SomeService { get; set; } 
} 

我有多个类从这个基类继承。

public class DerivedClass : BaseClass, IDerivedClass { 

} 

而且我使用以下注射。

builder.RegisterType<DerivedClass>().As<IDerivedClass>().OnActivated(e => e.Instance.SomeService = e.Context.Resolve<IService>()); 

我为约12个扩展基类的其他类做了这个。有没有办法让所有扩展BaseClass的类都能得到我的IService注册,而不需要为每个注册设置一个Activation事件?它的工作正常,但只想清理注册。

回答

1

只需使用构造函数注入。为你的类像

public DerivedClass(IServiceOne service1, IService2 service2) 
{ 
this._service1 = service1; 
this._service2 = service2; 

} 

创建带有参数的构造函数,使autofac自动做他的工作,像

builder.RegisterType<T>(); 
+0

我想我应该扩大。我有一个循环参考,因此OnActivated。 (循环参考是有意义的)。我想我的意思是,我希望OnActivated应用于BaseClass上的所有子类,而无需为每个注册编写OnActivated。 (IService是一个Singleton,它也引用所有已注册的IDerivedClasses)。它与OnActivated一起工作良好,只是想清理它。 – 2012-04-15 23:30:46

+0

其实我可能是错的,但是如果你对singleton有循环依赖 - 在设计这个组件的时候出错的可能性是99.9%。关于你的问题,如果它仍然适合你,我会在几天后看看,现在非常忙碌 – Ph0en1x 2012-04-17 14:39:12