有没有人使用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) 当我从头创建一个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) 该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)
你会如何为此指定用户名和密码?
我有一个自定义的EncryptedCharField,我希望在连接UI时基本上显示为CharField,但在数据库中存储/检索之前,它会加密/解密它.
该自定义字段的文件说要:
__metaclass__ = models.SubfieldBase因此,您认为这很容易 - 只需要解密该值,然后再加密它.
松散地基于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) 为了显示一个简单的例子,我想向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消息
如何让它单独发送这些消息?
尝试在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开发人员工具,我尝试删除缓存文件,但我仍然收到错误.
我希望能够从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) 使用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) 通过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返回它运行的命令的状态代码?
我想使用一些需要指向结构的指针的外部代码。在调用代码时,我有一个接口变量。
当从那个变量创建一个指针时,指针的类型是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)
测试失败: …
node.js ×2
.net ×1
angular ×1
asp.net-mvc ×1
c# ×1
django ×1
gem ×1
go ×1
heroku ×1
javascript ×1
modelbinders ×1
mongodb ×1
postgresql ×1
pycrypto ×1
python ×1
ruby ×1
rxjs ×1
sockets ×1
tcp ×1