Nupackの生成されたNINJECTMVC3.CSがコンパイルされないのはなぜですか? (または、ASP.NET MVC 3ベータのMVCServicelocatorはどうなりましたか?)
-
28-09-2019 - |
質問
Nupack Addinを使用してNinject MVC 3パッケージをインストールすると、生成された次のコンパイルエラーが発生します NinjectMVC3.cs
ファイル。
The name 'MvcServiceLocator' does not exist in the current context
サンプルビデオ David Ebboが投稿しました 09:43にうまく機能します.
これが現在生成されているクラスです。
public class NinjectMVC3 {
public static void RegisterServices(IKernel kernel) {
//kernel.Bind<IThingRepository>().To<SqlThingRepository>();
}
public static void SetupDependencyInjection() {
// Create Ninject DI Kernel
IKernel kernel = new StandardKernel();
// Register services with our Ninject DI Container
RegisterServices(kernel);
// Tell ASP.NET MVC 3 to use our Ninject DI Container
MvcServiceLocator.SetCurrent(new NinjectServiceLocator(kernel));
}
}
解決
基本的に、 MvcServiceLocator
去りました。ビデオが作られたときはいつでも、バージョンに不一致がありました。
ニッジを機能させる2つのステップは次のとおりです。交換 NinjectMVC3
以下で(必要ではない名前も変更しました):
public class NinjectResolver : IDependencyResolver
{
private static IKernel kernel;
public NinjectResolver()
{
kernel = new StandardKernel();
RegisterServices(kernel);
}
public static void RegisterServices(IKernel kernel)
{
//kernel.Bind<IThingRepository>().To<SqlThingRepository>();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
}
次の行を追加します App_Start()
の gloabl.asax.cs
DependencyResolver.SetResolver(new NinjectResolver());
他のヒント
パッケージを修正し、フィードにアップロードしました。あなたがそれを試して、それが今動作していることを確認する機会があれば素晴らしいでしょう。 ninject.mvc3のバージョンを0.1から0.2に増やしました:)
ninject.mvc3 0.3をインストールしたばかりです。 ASP.NET MVC 3ベータを使用しています。
このコードを自分に追加しました Global.asax.cs
ファイル:
public static void RegisterServices(IKernel kernel)
{
kernel.Bind<IProductRepository>().To<SqlProductRepository>();
}
public void SetupDependencyInjection()
{
IKernel kernel = new StandardKernel();
RegisterServices(kernel);
DependencyResolver.SetResolver(new Ninject.Mvc3.NinjectServiceLocator(kernel));
}
そして、私は電話を追加しました SetupDependencyInjection()
の中へ Application_Start()
このように機能します。
protected void Application_Start()
{
SetupDependencyInjection();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
IProductRepository
と SqlProductRepository
モデルフォルダーで作成したクラスであり、コンストラクターの依存関係を追加しました HomeController
. 。これがコードです:
private IProductRepository products;
public HomeController(IProductRepository productRepository)
{
products = productRepository;
}
ブレークポイントをいくつか追加してアプリケーションを実行しましたが、魅力のように機能します。お役に立てれば。