gpt4 book ai didi

c# - 具有通用类型的 Caliburn Micro phonecontainer 注入(inject)服务,始终为 null

转载 作者:行者123 更新时间:2023-11-30 16:22:58 26 4
gpt4 key购买 nike

我正在尝试在使用泛型的电话容器上注册服务。

public class JsonWebClient<TResult> : IJsonWebClient<TResult>

我是这样注册的:

protected override void Configure()
{
_container = new PhoneContainer(RootFrame);

_container.RegisterPhoneServices();
_container.Singleton<MainPageViewModel>();
_container.PerRequest<LoginViewModel>();


_container.RegisterPerRequest(typeof(IJsonWebClient<>), "jsonwebclient", typeof(JsonWebClient<>));
}

然后我有一个服务(注册服务),我在构造函数中注入(inject) JsonWebClient

public SignupService(IJsonWebClient<UserDto> webClient)
{
_webClient = webClient;
}

我的问题是 webClient 始终为空。

最佳答案

似乎SimpleContainer Caliburn.Micro 内部不支持开放泛型注册。

所以你需要注册你的IJonWebClient<T>对于每个 T

_container.RegisterPerRequest(
typeof(IJsonWebClient<UserDto>),
"jsonwebclientuser",
typeof(JsonWebClient<UserDto>));
_container.RegisterPerRequest(
typeof(IJsonWebClient<OtherDto>),
"jsonwebclientother",
typeof(JsonWebClient<OtherDto>));

注意:如果您不是按键解析 key字符串应为 null打电话时 RegisterPerRequest .所以它应该是这样的:

_container.RegisterPerRequest(
typeof(IJsonWebClient<UserDto>),
null,
typeof(JsonWebClient<UserDto>));

或者您可以使用其他一些支持开放泛型的 IoC 容器,例如 Ninject 或 Autofac。

关于c# - 具有通用类型的 Caliburn Micro phonecontainer 注入(inject)服务,始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com