3

ジェネリックを使用する電話コンテナにサービスを登録しようとしています。

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

JsonWebClient次に、コンストラクターに挿入するサービス(サインアップサービス)があります

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

私の問題はそれwebClientが常にnullであるということです。

4

1 に答える 1

3

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文字列を入力する必要があります。したがって、次のようになります。nullRegisterPerRequest

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

または、NinjectやAutofacなどのオープンジェネリックをサポートする他のIoCコンテナを使用することもできます。

于 2012-08-21T12:08:30.790 に答える