c# - 基类中的 Autofac 属性注入(inject)

标签 c# dependency-injection autofac

我正在开发 Windows Phone 8.1 应用程序,我有一个具有公共(public)属性的基类。

public class ViewModelBase
{
   public ISomeClass MyProp {get;set;}
}

我的派生类是这样的

public class MainViewModel : ViewModelBase
{
    private readonly INavigation _navigation;
    public MainViewModel(INavigation navigation)
    {
        _navigation = navigation;
    }
}

在我的 App.cs 中有

 var builder = new ContainerBuilder();
 builder.RegisterType<Navigation>().As<INavigation>();
 builder.RegisterType<SomeClass>().As<ISomeClass>();
 builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());

创建 MainViewModel 后,我的 INavigation 已解析,但 MyProp 为空。 我试过了

builder.Register(c => new ViewModelBase { MyProp = c.Resolve<ISomeClass>() });

builder.Register(c => new ViewModelBase()).OnActivated(e => e.Instance.MyProp = e.Context.Resolve<ISomeClass>());

builder.RegisterType<ViewModelBase>().PropertiesAutowired();

但都不起作用!

解决方案贴在这里 http://bling.github.io/blog/2009/09/07/member-injection-module-for-autofac/

有效,但我不喜欢它:)

在这种情况下我不想使用构造函数注入(inject)。

谢谢。

最佳答案

这将加载所有继承 ViewModelBase 的类,并仅注入(inject)您想要的特定属性。很多时候,您不希望子类的其他属性被注入(inject)。

builder.RegisterAssemblyTypes( GetType().Assembly )
    .AssignableTo<ViewModelBase>()
    .OnActivated( args =>
    {
        var viewModel = args.Instance as ViewModelBase;
        if( viewModel != null )
        {
            viewModel.MyProp = args.Context.Resolve<ISomeClass>();
        }
    } );

关于c# - 基类中的 Autofac 属性注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808072/

相关文章:

c# - 计算平方根和幂的快速方法?

c# - Ninject 的代理工厂

autofac - Autofac 中的 Lazy<T> 支持发生了什么?

java - 在 Spring 服务中,我应该设置方法末尾使用的 null 或空列表以节省内存吗?

wcf - 使 WCF OperationContext 与 DI 和测试很好地配合使用

Autofac MVC与ASP.Net MVC 4的集成

c# - 为什么我在 C# 中需要分部类和虚方法?

c# - 为什么 Console.Readline() 对其允许的文本长度有限制?

C# 和 C# 中的 VB

c# - 多项目解决方案中的 Autofac