simpleinjector 单例 属性
simpleinjector singleton property
对于简单的注入器,有没有办法设置一个 属性 或者有一个不是接口的构造函数参数?
我的应用程序是一个 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;
您可以使用 RegisterInitializer
更稳健一些
Registers an Action<T>
delegate that runs after the creation of
instances that implement or derive from the given TService. Please
note that only instances that are created by the container (using
constructor injection) can be initialized this way
container.RegisterInitializer<IWebBrowser>(x => o.WebView = WebView);
注意 :虽然我对 WebView
是什么以及为什么无论如何都需要戳它有点困惑.
对于简单的注入器,有没有办法设置一个 属性 或者有一个不是接口的构造函数参数?
我的应用程序是一个 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;
您可以使用 RegisterInitializer
更稳健一些
Registers an
Action<T>
delegate that runs after the creation of instances that implement or derive from the given TService. Please note that only instances that are created by the container (using constructor injection) can be initialized this way
container.RegisterInitializer<IWebBrowser>(x => o.WebView = WebView);
注意 :虽然我对 WebView
是什么以及为什么无论如何都需要戳它有点困惑.