使用简单的注入器,有没有办法设置属性或拥有不是接口的构造函数参数?
我的应用程序是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;
答案 0 :(得分:1)
您可以使用更健壮的RegisterInitializer
注册一个
Action<T>
委托,该委托在创建后运行 实现或从给定TService派生的实例。请 请注意,只有容器创建的实例(使用 构造函数注入)可以通过这种方式初始化
container.RegisterInitializer<IWebBrowser>(x => o.WebView = WebView);
注意 :尽管我对WebView
是什么以及为什么需要戳它有些困惑。 / em>