Asp.net mvc Autofac-ASP.NET MVC 1使用什么版本和示例?

Asp.net mvc Autofac-ASP.NET MVC 1使用什么版本和示例?,asp.net-mvc,dependency-injection,ioc-container,autofac,Asp.net Mvc,Dependency Injection,Ioc Container,Autofac,ASP.NET MVC 1.0应使用哪个Autofac版本。另外,使用存储库模式将它与ASP.NET MVC结合使用有哪些示例 public class MyController : BaseController { private readonly IUser _user; private readonly ICompany _company; public MyController(IUser user, ICompany company) {

ASP.NET MVC 1.0应使用哪个Autofac版本。另外,使用存储库模式将它与ASP.NET MVC结合使用有哪些示例

public class MyController : BaseController
{
    private readonly IUser _user;
    private readonly ICompany _company;

    public MyController(IUser user, ICompany company)
    {
        _user = user;
        _company = company;
    }

    public ActionResult Index()
    {
        // Actions
    }
}

我认为你根本用不着它


根据,仅支持MVC2。

您可以将Autofac 1.4.1至1.4.4用于ASP.NET MVC1。我正在运行1.4.2。下面是Autofac 1.4.2的引导程序示例(删除了一些代码片段。不确定1.4.4中的哪些更改可能会影响此代码)

命名空间Web
{
所有组件的公共类PropertyInjectionForAllComponents:Module
{
受保护的覆盖无效AttachToComponentRegistration(IContainer容器、ICComponentRegistration)
{
registration.Activating+=ActivatingHandler.InjectProperties;
}
}
公共静态类引导程序
{
公共静态IContainerProvider配置Autofac(字符串服务器路径)
{
var configManager=newconfigmanager(newconfigurationmanagerrapper());
字符串environment=configManager.AppSettings(“环境”);
requireslattribute.Enable=configManager.AppSettings(“enablesl”).IsTrue();
//Autofac IoC配置请参阅http://www.codeproject.com/KB/architecture/di-with-autofac.aspx 详情
//ExternallyOwned()-用于您不希望处置的一次性对象,例如Console.Out作为实现TextWriter。
//OnActivating()-允许属性注入
//SingletonScope()-只会为流程创建一个类实例。这是默认行为。
//FactoryScope()-每次从容器请求组件时,都会创建一个新实例。
//ContainerScoped()-这提供了实现每个线程、每个请求或每个事务组件生命周期所需的灵活性。
//HttpRequestScoped()-意味着每个传入的web请求最多会创建一个组件实例。这对于应该在单个请求中共享的项目(例如存储库)非常方便。
var builder=newcontainerbuilder();
//SCIBS.核心组件
Register(c=>newhttpcontextwrapper(HttpContext.Current)).As().HttpRequestScoped();
OnActivating(ActivatingHandler.InjectProperties).SingletonScoped();
Register().WithArguments(新名称参数(“applicationVirtualPath”,HostingEnvironment.applicationVirtualPath)).As().SingletonScoped();
Register().As().SingletonScoped();
Register().As().SingletonScoped();
Register().As().SingletonScoped();
builder.Register().As().HttpRequestScoped();
builder.Register().WithArguments(新名称参数(“mailLogger”),新Log4NetLogger(“EmailLogger”)).As().FactoryScope();
builder.Register().As().FactoryScope();
builder.Register().As().FactoryScope();
builder.Register().As().FactoryScope();
builder.Register().As().FactoryScope();
builder.Register().As().FactoryScope();
builder.Register().As().FactoryScope();
builder.Register().As().FactoryScope();
var autofacControllerModule=新的autofacControllerModule(System.Reflection.Assembly.getExecutionGassembly());
autofacControllerModule.ActivatingHandler+=ActivatingHandler.InjectProperties;
builder.RegisterModule(autofacControllerModule);
builder.RegisterModule(新属性injectionforallcomponents());
IContainerProvider containerProvider=新的containerProvider(builder.Build());
ControllerBuilder.Current.SetControllerFactory(新的AutofacControllerFactory(containerProvider));
返回集装箱供应商;
}
}
}
以及如何从应用程序中调用它:

public class MvcApplication : HttpApplication, IContainerProviderAccessor
{
    private static IContainerProvider _containerProvider;

    public IContainerProvider ContainerProvider
    {
        get
        {
            return _containerProvider;
        }
    }

    protected void Application_Start ()
    {
        Log.Info ("Application_Start");

        string serverPath = Server.MapPath ("~");
        _containerProvider = Bootstrapper.ConfigureAutofac (serverPath);

        var configManager = ContainerProvider.RequestContainer.Resolve<IConfigManager> ();
        EnableSSL = configManager.AppSettings ("EnableSSL").IsTrue ();

        RegisterRoutes (RouteTable.Routes);

        // NOTE: http://stackoverflow.com/questions/2854024/how-to-prevent-debug-assert-to-show-a-modal-dialog
        var logger = ContainerProvider.RequestContainer.Resolve<ILogger> ();
        Debug.Listeners.Clear ();
        Debug.Listeners.Add (new LoggerTraceListener () {Log = logger});
    }
}
公共类MVC应用程序:HttpApplication,IContainerProviderAccessor
{
专用静态IContainerProvider\u containerProvider;
公共IContainerProvider容器Provider
{
得到
{
返回集装箱供应商;
}
}
受保护的无效应用程序\u开始()
{
日志信息(“应用程序启动”);
字符串serverPath=Server.MapPath(“~”);
_containerProvider=Bootstrapper.ConfigureAutofac(服务器路径);
var configManager=ContainerProvider.RequestContainer.Resolve();
enablesl=configManager.AppSettings(“enablesl”).IsTrue();
注册地址(RouteTable.Routes);
//注:http://stackoverflow.com/questions/2854024/how-to-prevent-debug-assert-to-show-a-modal-dialog
var logger=ContainerProvider.RequestContainer.Resolve();
Debug.Listeners.Clear();
Debug.Listeners.Add(新的LoggerTraceListener(){Log=logger});
}
}

我决定在我的应用程序中使用
StructureMap
。以下是我所做的工作:

创建我自己的CustomFactory类:

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        if (controllerType == null)
        {
            return base.GetControllerInstance(controllerType);
        }

        try
        {
            return ObjectFactory.GetInstance(controllerType) as Controller;
        }
        catch (StructureMapException ex)
        {
            throw;
        }
    }
}
创建一个引导程序,使用StructureMap约定为我的程序集注册所有接口及其实现。(我在上面贴了一个帖子):


在我把问题发到这里之前,我正在看这个页面,希望有人能给我指出正确的版本。可惜它不受支持。StructureMap怎么样,它支持ASP.NET MVC 1吗?谢谢。嗨,托德,有没有办法让Autofac自动注册存储库/接口,或者我们必须为每个存储库/接口手动注册?StructureMap有一个约定,它可以扫描程序集并注册所需的所有组件。谢谢。打电话到AutofacControllerModule可以帮你做到这一点。只需给它一个不同的程序集引用。
public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        if (controllerType == null)
        {
            return base.GetControllerInstance(controllerType);
        }

        try
        {
            return ObjectFactory.GetInstance(controllerType) as Controller;
        }
        catch (StructureMapException ex)
        {
            throw;
        }
    }
}
public class StructureMapBootstrapper : IBootstrapper
{
    private static bool hasStarted;

    public void BootstrapStructureMap()
    {
        ObjectFactory.Initialize(x =>
        {
            x.AddRegistry<FactoryRegistry>();
        });
    }

    public static void Restart()
    {
        if (hasStarted)
        {
            ObjectFactory.ResetDefaults();
        }
        else
        {
            Bootstrap();
            hasStarted = true;
        }
    }

    public static void Bootstrap()
    {
        new StructureMapBootstrapper().BootstrapStructureMap();
    }
}

public class FactoryRegistry : Registry
{
    public FactoryRegistry()
    {
        Scan(s =>
        {
            s.Assembly("Calendar.Library");
            s.TheCallingAssembly();
            s.AddAllTypesOf<IController>().NameBy(type => type.Name.Replace("Controller", "").ToLower());
            s.WithDefaultConventions();
        });
    }
}
protected void Application_Start()
{
    StructureMapBootstrapper.Bootstrap();
    ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}