C# 解析具有依赖项注入的类
我正在使用Unity控制Xamarin表单应用程序中的依赖项注入。我有一个视图模型类,它将父id和unity注入服务作为构造函数参数C# 解析具有依赖项注入的类,c#,xamarin,dependency-injection,xamarin.forms,unity-container,C#,Xamarin,Dependency Injection,Xamarin.forms,Unity Container,我正在使用Unity控制Xamarin表单应用程序中的依赖项注入。我有一个视图模型类,它将父id和unity注入服务作为构造函数参数 public class BrowseViewModel { public BrowseViewModel(int parentId, IInjectedService injectedService) { } } 我已经在unity容器中注册了该类 unityContainer.registerType<BrowseViewModel&g
public class BrowseViewModel {
public BrowseViewModel(int parentId, IInjectedService injectedService) {
}
}
我已经在unity容器中注册了该类
unityContainer.registerType<BrowseViewModel>();
unityContainer.registerType<IInjectedService, InjectedService>();
unityContainer.registerType();
我也在unity容器中注册了该服务
unityContainer.registerType<BrowseViewModel>();
unityContainer.registerType<IInjectedService, InjectedService>();
unityContainer.registerType();
我的问题是,当Unity创建类的实例时,如何指定parentId的值?我认为我不必指定
injectedService
参数,因为我已经向unity注册了这个类,它是一个单例类。您需要像这样注册BrowseViewModel
:
container.RegisterType<Func<int, BrowseViewModel>>(
new InjectionFactory(c =>
new Func<int, BrowseViewModel>(id=> c.Resolve<BrowseViewModel>(new ParameterOverrides { { "parentId", id},))));
class SomeViewClass
{
SomeViewClass(Func<int, BrowseViewModel> browseViewMdoelFactory)
{
browsceViewModelFactory(parentId);
}
}
container.RegisterType(
新注射工厂(c=>
newfunc(id=>c.Resolve(新参数覆盖{{“parentId”,id},));
然后在使用BrowseViewModel的控件中,需要使用Func BrowseViewDoelFactory
然后像这样使用它:
container.RegisterType<Func<int, BrowseViewModel>>(
new InjectionFactory(c =>
new Func<int, BrowseViewModel>(id=> c.Resolve<BrowseViewModel>(new ParameterOverrides { { "parentId", id},))));
class SomeViewClass
{
SomeViewClass(Func<int, BrowseViewModel> browseViewMdoelFactory)
{
browsceViewModelFactory(parentId);
}
}
class-SomeViewClass
{
SomeViewClass(Func BrowseViewDoelFactory)
{
browsceViewModelFactory(父ID);
}
}
您需要像这样注册浏览视图模型
:
container.RegisterType<Func<int, BrowseViewModel>>(
new InjectionFactory(c =>
new Func<int, BrowseViewModel>(id=> c.Resolve<BrowseViewModel>(new ParameterOverrides { { "parentId", id},))));
class SomeViewClass
{
SomeViewClass(Func<int, BrowseViewModel> browseViewMdoelFactory)
{
browsceViewModelFactory(parentId);
}
}
container.RegisterType(
新注射工厂(c=>
newfunc(id=>c.Resolve(新参数覆盖{{“parentId”,id},));
然后在使用BrowseViewModel的控件中,需要使用Func BrowseViewDoelFactory
然后像这样使用它:
container.RegisterType<Func<int, BrowseViewModel>>(
new InjectionFactory(c =>
new Func<int, BrowseViewModel>(id=> c.Resolve<BrowseViewModel>(new ParameterOverrides { { "parentId", id},))));
class SomeViewClass
{
SomeViewClass(Func<int, BrowseViewModel> browseViewMdoelFactory)
{
browsceViewModelFactory(parentId);
}
}
class-SomeViewClass
{
SomeViewClass(Func BrowseViewDoelFactory)
{
browsceViewModelFactory(父ID);
}
}
您有两个选项。您可以按如下方式注册您的浏览服务模型:
unityContainer.RegisterType<BrowseViewModel>(new InjectionFactory(c => new BrowseViewModel(1234, c.Resolve<IInjectedService>())));
然后在类中注入BrowseViewModel工厂
,您需要BrowseViewModel
,并使用正确的parentId
调用create方法
public class SomeOtherClass
{
private BrowseViewModelFactory _browseViewModelFactory;
public SomeOtherClass(BrowseViewModelFactory browseViewModelFactory)
{
_browseViewModelFactory = browseViewModelFactory;
}
public void DoStuff()
{
var browseViewModel = _browseViewModelFactory.CreateBrowseViewModel(4321);
}
}
您有几个选项。您可以按如下方式注册BrowserViewModel:
unityContainer.RegisterType<BrowseViewModel>(new InjectionFactory(c => new BrowseViewModel(1234, c.Resolve<IInjectedService>())));
然后在类中注入BrowseViewModel工厂
,您需要BrowseViewModel
,并使用正确的parentId
调用create方法
public class SomeOtherClass
{
private BrowseViewModelFactory _browseViewModelFactory;
public SomeOtherClass(BrowseViewModelFactory browseViewModelFactory)
{
_browseViewModelFactory = browseViewModelFactory;
}
public void DoStuff()
{
var browseViewModel = _browseViewModelFactory.CreateBrowseViewModel(4321);
}
}
此外,您可以在尝试解析
BrowserViewModel
时设置parentId
首先,只需注册类型:
container.RegisterType<BrowseViewModel>();
// Mark that InjectedService is the singleton using ContainerControlledLifetimeManager
container.RegisterType<IInjectedService, InjectedService>(new ContainerControlledLifetimeManager());
此外,您可以在尝试解析
BrowserViewModel
时设置parentId
首先,只需注册类型:
container.RegisterType<BrowseViewModel>();
// Mark that InjectedService is the singleton using ContainerControlledLifetimeManager
container.RegisterType<IInjectedService, InjectedService>(new ContainerControlledLifetimeManager());