simpleinjector单例属性

时间:2019-04-04 01:21:45

标签: c# uwp simple-injector

使用简单的注入器,有没有办法设置属性或拥有不是接口的构造函数参数?

我的应用程序是UWP WebVew,大多数服务都依赖于它及其状态。

我为此创建了一个包装器,以便可以将其注入到所有这样的服务中:

public interface IWebBrowser
{
    WebView WebView { get; set; }
}

public class WebBrowser : IWebBrowser
{
    public WebView WebView { get; set; }
}

public sealed partial class MainPage : Page
{

    public MainPage()
    {
        InitializeComponent();

        var Container = new Container();
        Container.Register<IWebBrowser, WebBrowser>(Lifestyle.Singleton);
        Container.Register<MainViewModel>();

        var web = Container.GetInstance<IWebBrowser>();
        web.WebView = WebView;

        Vm = Container.GetInstance<MainViewModel>();
    }
}

public class MainViewModel : ViewModelBase
{
    private readonly web;

    public MainViewModel(IWebBrowser web)
    {
        this.web = web;
    }
}

这有效,但看起来容易出错。没有这两行,有没有办法做到这一点:

var web = Container.GetInstance<IWebBrowser>();
web.WebView = WebView;

1 个答案:

答案 0 :(得分:1)

您可以使用更健壮的RegisterInitializer

  

注册一个Action<T>委托,该委托在创建后运行   实现或从给定TService派生的实例。请   请注意,只有容器创建的实例(使用   构造函数注入)可以通过这种方式初始化

container.RegisterInitializer<IWebBrowser>(x => o.WebView = WebView);

注意 :尽管我对WebView是什么以及为什么需要戳它有些困惑。 / em>