我想了解如何在MVC4应用程序中解决统一命名类型注册。
我正在使用“Unity 3.0”和“Unity boostrapper for ASP.NET MVC”。
我知道unity是在DependencyResolver中注册的,所以我可以使用DependencyResolver方法来获取注册类型的实例。
当我想要回一个简单的注册时,这很好。
例如
//Registration
container.RegisterType<IFootballer, VanPersey>();
//Instantiation
var footballer1 = DependencyResolver.Current.GetService<IFootballer>();
但是,当我想获取对命名类型注册的引用时,IDependencyResolver接口似乎没有提供获取命名类型注册实例的适当方法。
如果我可以直接访问unity容器,我会执行以下操作:
//Registration
container.RegisterType<IFootballer, VanPersey>("Attacker" );
container.RegisterType<IFootballer, NemanjaVidic>("Defender");
//Instantiation
unityContainer.Resolve<IFootballer, Footballer>("Attacker")
所以我的问题是,在MVC应用程序中使用unity来获取命名注册的实例,最合适的方法是什么。有进入unity comtainer的通道吗?
请注意,这个问题不适用于任何生产实现,我正在研究Unity(和IoC容器,这是第一次)并联系以获得更好的理解。
我知道在生产中,我很可能会通过控制器构造函数传递依赖项,这实际上会让我想到另一个问题。
在以下示例中使用控制器构造函数注入时,如何指示要解析的命名类型:
//Registration
container.RegisterType<IFootballer, VanPersey>("Attacker" );
container.RegisterType<IFootballer, NemanjaVidic>("Defender");
//Instantiation
public HomeController(IFootballer footballer)
为了帮助其他想做同样事情的人,我发现了以下几点:
当使用"Unity 3.0"和"Unity boostrapper for AP. NET MVC"时,我发现unityConfig类公开了一个GetConfiredContainer方法,在该方法中,您可以直接访问Unity容器,而无需使用依赖解析程序。
来自UnityConfig的片段
/// <summary>
/// Specifies the Unity configuration for the main container.
/// </summary>
public class UnityConfig
{
#region Unity Container
private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() =>
{
var container = new UnityContainer();
RegisterTypes(container);
return container;
});
/// <summary>
/// Gets the configured Unity container.
/// </summary>
public static IUnityContainer GetConfiguredContainer()
{
return container.Value;
}
#endregion
}
因此,我可以直接访问Unity容器来获取命名类型实例。
var footballer1 = UnityConfig.GetConfiguredContainer().Resolve<IFootballer>("Attacker");
var footballer2 = UnityConfig.GetConfiguredContainer().Resolve<IFootballer>("Defender");
很可能容器本身也已注册,以便解析器能够解析它:
var container = DependencyResolver.Current.GetService<IUnityContainer>();
var vanPersey = container.RegisterType<IFootballer, VanPersey>("Attacker" );
我还没有在解析器上尝试过,但在ServiceLocator
上总是这样。
我想在Spring引导管理服务器中注册同一个应用程序的两个实例(只有端口不同)。但是我在我的Spring引导管理面板中只看到一个实例(MyApp实例2)。我的配置有什么问题? 基本信息: Spring Boot管理客户端-2.0.0-SNAPSHOT Spring Boot管理服务器-2.0.0-SNAPSHOT Spring Boot版本(两者)-2.0.1。发布 我的申请书。yml文件:
我最近开始玩ASP。net MVC(4),但我不能对我遇到的这一个问题掉以轻心。我相信当你知道的时候这很容易。 我基本上是在索引视图中尝试执行以下操作: < li >在索引视图中列出“便笺”类型数据库中的当前项目(这很简单) < li >在同一索引视图中创建新项目(不太容易)。 所以我想我需要一个部分视图,并且我已经创建了如下(_CreateNote.cshtml): 在我的原始索引视图(Inde
我有一个如下所示的MainWindowFx类。它基本上创建了一个简单的GUI。 现在我想在另一个类中使用此对象的实例: 但是当我运行这个时,我遇到了这个错误: 我对此做了一些搜索,并猜测它与线程有关。。。但我还是不知道。有什么建议吗?
在Visual Studio 2010中,我使用ASP. NET MVC 4创建一个web api项目,如下所示:https://www.youtube.com/watch?v=H9vBxAH4f5E 事情进展顺利-我成功地使用了方法,但在使用方法时,我遇到了一个问题: 无法从媒体类型为应用程序/x-www-form-urlencoded的内容中读取类型为字符串的对象。 我的看起来像这样: 为什么
有人能解释一下下面的代码是如何毫无例外地工作的吗。我在想,当为星期天创建新实例时,它也会为星期一(星期天内)创建一个新实例,然后再为星期天(星期一内)创建一个新实例,以此类推。。。类似递归的东西,因为它们都是课程周的一部分。但我的理解是错误的,因为下面的代码运行良好。 我有这个疑问,当我读到java枚举。