小编Ove*_*d D的帖子

无法使用Unity将依赖项注入ASP.NET Web API控制器

有没有人使用IoC容器运行将依赖项注入ASP.NET WebAPI控制器?我似乎无法让它发挥作用.

这就是我现在正在做的事情.

在我的global.ascx.cs:

    public static void RegisterRoutes(RouteCollection routes)
    {
            // code intentionally omitted 
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        IUnityContainer container = BuildUnityContainer();

        System.Web.Http.GlobalConfiguration.Configuration.ServiceResolver.SetResolver(
            t =>
            {
                try
                {
                    return container.Resolve(t);
                }
                catch (ResolutionFailedException)
                {
                    return null;
                }
            },
            t =>
            {
                try
                {
                    return container.ResolveAll(t);
                }
                catch (ResolutionFailedException)
                {
                    return new System.Collections.Generic.List<object>();
                }
            });

        System.Web.Mvc.ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory(container)); 

        BundleTable.Bundles.RegisterTemplateBundles();
    }

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer().LoadConfiguration();

        return container;
    }
Run Code Online (Sandbox Code Playgroud)

我的控制器工厂:

public class …
Run Code Online (Sandbox Code Playgroud)

.net c# unity-container asp.net-web-api

81
推荐指数
4
解决办法
9万
查看次数

发生错误时,rxjs observable无法完成

当我从头创建一个observable并且有观察者错误然后完成时,永远不会调用订阅的完成部分.

var observer = Rx.Observable.create(function(observer){
    observer.onError(new Error('no!'));
    observer.onCompleted();
})

observer.subscribe(
    function(x) { console.log('succeeded with ' + x ) },
    function(x) { console.log('errored with ' + x ) },
    function() { console.log('completed') }
)
Run Code Online (Sandbox Code Playgroud)

输出是:

errored with Error: no!
Run Code Online (Sandbox Code Playgroud)

我希望它是:

errored with Error: no!
completed
Run Code Online (Sandbox Code Playgroud)

如果我更改代码以调用onNext而不是onError,则observable正确完成:

var observer = Rx.Observable.create(function(observer){
    observer.onNext('Hi!');
    observer.onCompleted();
})

observer.subscribe(
    function(x) { console.log('succeeded with ' + x ) },
    function(x) { console.log('errored with ' + x ) },
    function() { console.log('completed') }
)
Run Code Online (Sandbox Code Playgroud)

我得到了预期的输出:

succeeded with Hi! …
Run Code Online (Sandbox Code Playgroud)

javascript reactive-programming rxjs angular

44
推荐指数
4
解决办法
2万
查看次数

如何使用Server实例指定mongodb用户名和密码?

MongoClient文档说明如何使用服务器实例来创建连接:

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server;

// Set up the connection to the local db
var mongoclient = new MongoClient(new Server("localhost", 27017));
Run Code Online (Sandbox Code Playgroud)

你会如何为此指定用户名和密码?

mongodb node.js

15
推荐指数
2
解决办法
2万
查看次数

如何创建加密的django字段,在从数据库中检索数据时转换数据?

我有一个自定义的EncryptedCharField,我希望在连接UI时基本上显示为CharField,但在数据库中存储/检索之前,它会加密/解密它.

自定义字段的文件说要:

  1. __metaclass__ = models.SubfieldBase
  2. 覆盖to_python以将数据从其原始存储转换为所需的格式
  3. 覆盖get_prep_value以在存储db之前转换该值.

因此,您认为这很容易 - 只需要解密该值,然后再加密它.

松散地基于django片段,该字段的文档如下:

class EncryptedCharField(models.CharField):
  """Just like a char field, but encrypts the value before it enters the database, and    decrypts it when it
  retrieves it"""
  __metaclass__ = models.SubfieldBase
  def __init__(self, *args, **kwargs):
    super(EncryptedCharField, self).__init__(*args, **kwargs)
    cipher_type = kwargs.pop('cipher', 'AES')
    self.encryptor = Encryptor(cipher_type)

  def get_prep_value(self, value):
     return encrypt_if_not_encrypted(value, self.encryptor)

  def to_python(self, value):
    return decrypt_if_not_decrypted(value, self.encryptor)


def encrypt_if_not_encrypted(value, encryptor):
  if isinstance(value, EncryptedString):
    return value
  else:
    encrypted = encryptor.encrypt(value) …
Run Code Online (Sandbox Code Playgroud)

python django pycrypto

14
推荐指数
1
解决办法
1万
查看次数

当向Node.js tcp套接字发送多条消息时,它们将作为单个消息进行流式传输

为了显示一个简单的例子,我想向node.js tcp socket发送多条消息.我只想在第一条消息完全发送/排出时发送第二条消息.但是,即使在等待调用写回调时,消息似乎也会作为一条消息发送.

以下是一些示例代码:

var net = require('net');

var server = net.createServer();

server.on('connection', function(socket){
  socket.write('First Message', function(){
    socket.write('Second Message')
  })
})

var client = new net.Socket();
client.setEncoding('utf8');

server.listen(9999, function(){
  client.connect(9999);
});

client.on('data', function(data){
  console.log('data received on socket:\n' + data);
});
Run Code Online (Sandbox Code Playgroud)

根据socket.write的node.js文档,"当最终写出数据时,将执行可选的回调参数 - 这可能不会立即执行."

基于此,在我的代码中,第二条消息只应在最终为第一条消息写出数据时发送.

但书面输出是:

socket上收到的数据:

第一条MessageSecond消息

如何让它单独发送这些消息?

sockets tcp node.js

14
推荐指数
2
解决办法
1万
查看次数

安装rubyracer时出错,错误"gem gem:package is corrupt"

尝试在OSX 10.9上安装therubyracer时,使用以下命令:

$ gem install therubyracer -v '0.12.0'
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ERROR:  Error installing therubyracer:
    invalid gem: package is corrupt, exception while verifying: undefined method `path2class' for #<Psych::ClassLoader:0x000001018cf210> (NoMethodError) in /Users/doved/.rvm/gems/ruby-2.0.0-p353/cache/therubyracer-0.12.0.gem
Run Code Online (Sandbox Code Playgroud)

安装了XCode开发人员工具,我尝试删除缓存文件,但我仍然收到错误.

ruby gem

13
推荐指数
1
解决办法
6915
查看次数

使用自定义ASP.NET MVC IValueProvider,而不是全局设置?

我希望能够从cookie中获取键/值并使用它来绑定模型.

我认为DefaultModelBinder不是构建自定义的ModelBinder,而是开箱即用,选择值来自哪里的最佳方法是设置它使用的IValueProvider.

为此,我不想创建自定义ValueProviderFactory并将其全局绑定,因为我只希望在特定的操作方法中使用此ValueProvider.

我已经构建了一个执行此操作的属性:

/// <summary>
/// Replaces the current value provider with the specified value provider
/// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class SetValueProviderAttribute : ActionFilterAttribute
{
    public SetValueProviderAttribute(Type valueProviderType)
    {
        if (valueProviderType.GetInterface(typeof(IValueProvider).Name) == null)
            throw new ArgumentException("Type " + valueProviderType + " must implement interface IValueProvider.", "valueProviderType");

        _ValueProviderType = valueProviderType;
    }

    private Type _ValueProviderType;

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        IValueProvider valueProviderToAdd = GetValueProviderToAdd();

        filterContext.Controller.ValueProvider = valueProviderToAdd;
    }

    private IValueProvider GetValueProviderToAdd()
    { …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc model-binding modelbinders value-provider

12
推荐指数
2
解决办法
7167
查看次数

在pg_restore中,如何使用postgres连接字符串指定主机/数据库/用户名/密码?

使用pg_dump时,可以使用postgres连接字符串指定主机/数据库/用户名/密码:

pg_dump postgres://someuser:somepassword@somehost.com:5432/somedatabase
Run Code Online (Sandbox Code Playgroud)

我想为pg_restore使用相同类型的连接字符串:

pg_restore -f dump.dump postgres://userb:somepassword@somehost.com:5432/otherdatabase
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

pg_restore: [archiver] could not open input file "postgres://userb:somepassword@somehost.com:5432/otherdatabase": No such file or directory
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.3

12
推荐指数
1
解决办法
6546
查看次数

如何通过heroku cli运行命令成功?

通过heroku运行命令时,例如:

heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)

我想知道命令是否成功.不幸的是,即使运行迁移失败,我的退出状态为0.

我正在编写一些包装此命令的ruby代码并调用它,如果命令失败则会引发错误.代码如下:

Open3.popen2e('heroku run rake db:migrate') do |stdin, stdout_and_stderr, wait_thr|
  raise 'running migration failed' unless wait_thr.value.success?
end
Run Code Online (Sandbox Code Playgroud)

即使运行此操作失败,我收到一条消息:

耙子流产了!StandardError:发生错误,此以及所有后续迁移都已取消:

我的代码本身不会引发错误.在上面的代码中检查wait_thr.value,它的退出代码为0,这意味着heroku CLI认为rake调用成功.

我的代码如何知道heroku cli运行的命令是否失败?有没有办法告诉heroku CLI返回它运行的命令的状态代码?

heroku heroku-toolbelt

9
推荐指数
2
解决办法
517
查看次数

在 go (golang) 中,如何将接口指针转换为结构指针?

我想使用一些需要指向结构的指针的外部代码。在调用代码时,我有一个接口变量。

当从那个变量创建一个指针时,指针的类型是interface{}*我需要它是结构类型的指针类型的时候。

图像中的代码TestCanGetStructPointer 不知道 Cat 类,并且它存在于某个外部包中。

我怎么能把它投射到这个?

这是一个代码示例:

import (
    "reflect"
    "testing"
)   

type Cat struct {
    name string
}

type SomethingGeneric struct {
    getSomething func() interface{}
}

func getSomeCat() interface{} {
    return Cat{}
}

var somethingForCats = SomethingGeneric{getSomething: getSomeCat}

func TestCanGetStructPointer(t *testing.T) {
    interfaceVariable := somethingForCats.getSomething()

    pointer := &interfaceVariable

    interfaceVarType := reflect.TypeOf(interfaceVariable)
    structPointerType := reflect.PtrTo(interfaceVarType)
    pointerType := reflect.TypeOf(pointer)

    if pointerType != structPointerType {
        t.Errorf("Pointer type was %v but expected %v", pointerType, structPointerType)
    }

}
Run Code Online (Sandbox Code Playgroud)

测试失败: …

go

8
推荐指数
1
解决办法
2万
查看次数