我正在将ASP.NET MVC3项目转换为MVC4.我试图找到使用StructureMap和MVC4的最佳方法.我找到了一些可行的解决方案,但尚未尝试过.
第一种解决方案非常简单轻便.第二个(Structuremap.MVC4)依赖于WebActivator进行启动.
什么是更好,最简单的方法?我是否仍需要引导所有内容并使用WebActivator设置DependencyResolver?
谢谢你的帮助.
在我的项目中,我ISerializers使用汇编扫描程序注册了许多实现.FWIW这是注册我的代码ISerializers
Scan(scanner =>
{
scanner.AssemblyContainingType<ISerializer>();
scanner.AddAllTypesOf<ISerializer>().NameBy(type => type.Name);
scanner.WithDefaultConventions();
});
Run Code Online (Sandbox Code Playgroud)
然后正确注册
ISerializer (...ISerializer)
Scoped as: Transient
JsonSerializer Configured Instance of ...JsonSerializer
BsonSerializer Configured Instance of ...BsonSerializer
Run Code Online (Sandbox Code Playgroud)
等等.
目前,我能够弄清楚如何解决我想要的串行器的唯一方法是使用硬编码服务位置调用
jsonSerializer = ObjectFactory.GetNamedInstance<ISerializer>("JsonSerializer");
Run Code Online (Sandbox Code Playgroud)
现在我在课堂上知道我特别想要jsonSerializer,所以有没有办法配置一个规则或类似的东西,让ISerializer根据属性名连接命名实例?所以我可以
MySomeClass(ISerializer jsonSerializer, ....)
Run Code Online (Sandbox Code Playgroud)
StructureMap正确解决了这种情况?或者我接近这个错误,也许我应该只注册实现ISerializer的具体类型,然后专门使用
MySomeClass(JsonSerializer jsonSerializer, ....)
Run Code Online (Sandbox Code Playgroud)
对于具体类的这些方面的东西?
c# structuremap dependency-injection inversion-of-control service-locator
我在这篇文章中读到他们正在使用依赖注入来在每个mvc请求上加载存储库实例.
我不确定我是否理解正确,但我目前在我的mvc应用程序中使用.UserRepository它实现了IUserRepository接口.此接口注入控制器构造函数
public class UserController : Controller
{
private IUserRepository repository;
public UserController(IUserRepository rep)
{ repository = rep; }
public UserController() : this(new UserRepository()) {}
}
Run Code Online (Sandbox Code Playgroud)
但我没有看到使用这个接口的任何好处(IUserRepository)我可以使用UserRepository没有接口.显然有人认为这是正确的方法(我已经在apress mvc4书上找到了它)我会请求有人详细说明为什么这是更好的方法而不是使用没有接口的存储库.
考虑到这一点,我会请任何人分享有关如何实现此方法的具体示例或链接(使用依赖注入来在每个mvc请求上加载存储库实例).