Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 ServiceStack-每个http请求的实例-(控制台应用程序)-(Ninject)_C# 4.0 - Fatal编程技术网

C# 4.0 ServiceStack-每个http请求的实例-(控制台应用程序)-(Ninject)

C# 4.0 ServiceStack-每个http请求的实例-(控制台应用程序)-(Ninject),c#-4.0,C# 4.0,我在服务堆栈中为每个http请求配置实例时遇到问题。我正在运行一个控制台应用程序,并试图使用Ninject作为我的容器 我想要一个实例持续1个完整请求。我想知道如何配置它 我想要一个例子,展示如何在请求开始时启动依赖项的生存期,以及如何在请求结束时处理同一实例 谁能给我举个例子,说明如何在autofac和ninject中实现这一点 public class OutboundHost : AppHostHttpListenerBase { public OutboundHost() :

我在服务堆栈中为每个http请求配置实例时遇到问题。我正在运行一个控制台应用程序,并试图使用Ninject作为我的容器

我想要一个实例持续1个完整请求。我想知道如何配置它

我想要一个例子,展示如何在请求开始时启动依赖项的生存期,以及如何在请求结束时处理同一实例

谁能给我举个例子,说明如何在autofac和ninject中实现这一点

public class OutboundHost : AppHostHttpListenerBase 
{
    public OutboundHost() : base("StarterTemplate HttpListener", typeof(SmsService).Assembly) { }

    protected override void ProcessRequest(System.Net.HttpListenerContext context)
    {
        Console.WriteLine("Begin Processing request");

        base.ProcessRequest(context);
    }

    public override void Start(string urlBase)
    {

        base.Start(urlBase);
    }

    public override void OnEndRequest()
    {
        Console.WriteLine("End processing request");

        base.OnEndRequest();
    }

    public override void Configure(Funq.Container container) {


        IKernel kernel = new StandardKernel();
        RegisterEntityFrameworkNinject(kernel);
        RegisterDependenciesNinject(kernel);

        LogManager.LogFactory = new ConsoleLogFactory();
        Console.WriteLine("Starting Container");
        container.Register<ICacheClient>(new MemoryCacheClient());
        container.RegisterValidators(typeof(SendSmsValidator).Assembly);
        Plugins.Add(new RazorFormat());
        Plugins.Add(new ValidationFeature());

        Plugins.Add(new RequestLogsFeature() { RequiredRoles = new string[] { } });


        Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {new CustomCredentialsAuthProvider(), }));

        SetConfig(new EndpointHostConfig
        {
            CustomHttpHandlers = {
                { System.Net.HttpStatusCode.NotFound, new RazorHandler("/notfound") }
            }
        });

        InitializeLookupTables(kernel);
        container.Adapter = new NinjectIocAdapter(kernel);
    }

    private void RegisterDependenciesNinject(IKernel kernel)
    {
        kernel.Bind<ILog>().ToMethod(c => LogManager.LogFactory.GetLogger(typeof (ConsoleLogger))).InSingletonScope();
        kernel.Bind<ISendSmsIntenda>().To<SendSmsIntenda>();
    }

    private void RegisterEntityFrameworkNinject(IKernel kernel)
    {
        kernel.Bind<IEntityFrameworkUnitOfWork>().To<EntityFrameworkUnitOfWork>();
        kernel.Bind<IUnitOfWork>().To<EntityFrameworkUnitOfWork>();
        kernel.Bind<IRepository>().To<Repository>();
        kernel.Bind<ILookupTableFactory>().To<EntityFrameworkLookupTableFactory>();

        kernel.Bind<IDataQuery>().To<DatabaseQuery>();

        kernel.Bind<IContextFactory>().To<DefaultContextFactory<OutboundContext>>().InSingletonScope()
              .WithConstructorArgument("connectionStringName", GetConnectionString());
    }

    private string GetConnectionString()
    {
        return ConfigurationManager.ConnectionStrings["Outbound"].ConnectionString;
    }

    private void InitializeLookupTables(IKernel kernel)
    {
        using (var kernelContext = kernel.BeginBlock())
        {
            var contextFactory = kernelContext.Get<IContextFactory>();
            var frameworkContext = kernelContext.Get<IContextFactory>().GetContext() as IFrameworkContext;
            var unitOfWork = kernelContext.Get<IUnitOfWork>();


            contextFactory.GetContext().RegisterLookupTable<SmsStatusType, SmsStatusEnum>();
            frameworkContext.SaveLookupTableChanges();

            unitOfWork.Commit();
        }
    }
}


public class NinjectIocAdapter : IContainerAdapter
{
    private readonly IKernel kernel;
    private readonly Container container;

    public NinjectIocAdapter(IKernel kernel, Funq.Container container)
    {

        this.kernel = kernel;
        this.container = container;
    }

    public T Resolve<T>()
    {
        return this.kernel.Get<T>();
    }

    public T TryResolve<T>()
    {
        return this.kernel.TryGet<T>();
    }
}

Autofac和NInject?你大概是说NInject?NInject的例子。但我也在寻找一个使用autofac的例子。