これまでのWep API2プロジェクトではNInjectを使用していましたが、今は奇妙な状況に苦しんでいます。NInjectは特定の依存関係を解決しません
私はコントローラに依存関係を設定するための3つのパラメータを受け取ります。コンストラクタは、次のようになります解決することがcan't
public UsersController(IUsersServices userServices, IConfigurationServices configServices, IUsersAPIProxy usersProxy)
{
this.configServices = configServices;
this.userServices = userServices;
this.usersProxy = usersProxy;
}
依存関係が最新のものである:IUsersAPIProxy。他の2 がコースオフ、依存関係のバインディングは、次のように定義されていると何も問題はありません。
kernel.Bind<IUsersAPIProxy>().To<UsersAPIProxy>().InRequestScope();
kernel.Bind<IUsersServices>().To<UsersServices>().InRequestScope();
kernel.Bind<IConfigurationServices>().To<ConfigurationServices>().InRequestScope();
IUsersAPIProxyインターフェースは非常に単純です:
public interface IUsersAPIProxy
{
UserModel ReadUser(string loginName);
IEnumerable<UserModel> ReadAllUsers();
}
クラスUsersApiProxy」はdoesnのトンを注入する必要がある任意の依存関係を持っている:
public class UsersAPIProxy : APIProxyBase, IUsersAPIProxy
{
public IEnumerable<UserModel> ReadAllUsers()
{
var request = new RestRequest("sec/users2/");
IRestResponse<List<UserModel>> response = client.Execute<List<UserModel>>(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
return response.Data;
throw new ApplicationException(String.Format("There was an error when trying to retrieve the users. Response content: {0}"));
}
public UserModel ReadUser(string loginName)
{
var request = new RestRequest("sec/users2/{loginName}");
request.AddUrlSegment("loginName", loginName);
IRestResponse<UserModel> response = client.Execute<UserModel>(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
return response.Data;
throw new ApplicationException(String.Format("There was an error when trying to retrieve data for user {0}. Response content: {1}", loginName, response.Content));
}
}
その基底クラスは、どちらか特別なものではありません。
public class APIProxyBase
{
protected RestClient client = null;
public APIProxyBase()
{
client = new RestClient("http://myHost:MyPort/");
}
}
コントローラのコンストラクタからIUsersAPIProxyパラメータを削除したかどうかわからないため、正常に動作します。奇妙なことは、この依存関係でのみ起こることです。パラメータを別の位置に変更すると、それは役に立ちません。また、実際に動作する他のインターフェイスやクラスははるかに複雑です。 言及する価値があることは、動作している型が動作しない型とは異なるDLLで定義されていることです。言うまでもなく、Web APIが両方のDLLを正しく参照しています。 次のように私が手に例外がある:
メッセージ:型「がUserController」のコントローラを作成しようとしたとき にエラーが発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認します。
スタックトレース:System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Createアン (HttpRequestMessage要求、HttpControllerDescriptor controllerDescriptor、タイプcontrollerType) System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessageリクエスト) エンja System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
誰かが正しい方向を教えてくれますか?
ありがとうございます!
実際のエラーダンプを掲載してください。 – JuanR
また、他の2つのパラメータのNinjectバインディングも投稿してください。 – JuanR
こんにちは! Actallエラーダンプは次のようになります: "タイプ 'UsersController'のコントローラを作成しようとすると、エラーが発生しました。コントローラにパラメータのないパブリックコンストラクタがあることを確認してください。 –