Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析具有依赖项注入的类_C#_Xamarin_Dependency Injection_Xamarin.forms_Unity Container - Fatal编程技术网

C# 解析具有依赖项注入的类

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

我正在使用Unity控制Xamarin表单应用程序中的依赖项注入。我有一个视图模型类,它将父id和unity注入服务作为构造函数参数

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());