本文整理汇总了C#中DefaultDependencyResolver.Register方法的典型用法代码示例。如果您正苦于以下问题:C# DefaultDependencyResolver.Register方法的具体用法?C# DefaultDependencyResolver.Register怎么用?C# DefaultDependencyResolver.Register使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DefaultDependencyResolver
的用法示例。
在下文中一共展示了DefaultDependencyResolver.Register方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FarmDisconnectRaisesUncleanDisconnects
public async Task FarmDisconnectRaisesUncleanDisconnects()
{
// Each node shares the same bus but are independent servers
const int nodeCount = 3;
var counters = new Infrastructure.PerformanceCounterManager();
var configurationManager = new DefaultConfigurationManager();
configurationManager.DisconnectTimeout = TimeSpan.FromSeconds(6);
using (EnableDisposableTracing())
using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000))
using (var loadBalancer = new LoadBalancer(nodeCount))
{
var broadcasters = new List<IConnection>();
var disconnectCounter = new DisconnectCounter();
loadBalancer.Configure(app =>
{
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(IMessageBus), () => bus);
resolver.Register(typeof(IConfigurationManager), () => configurationManager);
resolver.Register(typeof(FarmConnection), () => new FarmConnection(disconnectCounter));
var connectionManager = resolver.Resolve<IConnectionManager>();
broadcasters.Add(connectionManager.GetConnectionContext<FarmConnection>().Connection);
app.MapSignalR<FarmConnection>("/echo", new ConnectionConfiguration
{
Resolver = resolver
});
});
var transport = new Client.Transports.LongPollingTransport(loadBalancer);
var connection = new Client.Connection("http://goo/echo");
await connection.Start(transport);
for (int i = 0; i < nodeCount; i++)
{
broadcasters[i].Broadcast(String.Format("From Node {0}: {1}", i, i + 1)).Wait();
await Task.Delay(TimeSpan.FromSeconds(1));
}
((Client.IConnection)connection).Disconnect();
await Task.Delay(TimeSpan.FromTicks(TimeSpan.FromSeconds(5).Ticks * nodeCount));
Assert.Equal(0, disconnectCounter.CleanDisconnectCount);
Assert.Equal(3, disconnectCounter.UncleanDisconnectCount);
}
}
示例2: DisposablesAreTrackedAndDisposed
public void DisposablesAreTrackedAndDisposed()
{
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(MyDisposable), () => new MyDisposable());
var disposable = resolver.Resolve<MyDisposable>();
resolver.Dispose();
Assert.True(disposable.Disposed);
}
示例3: UntrackedDisposablesAreNotTracked
public void UntrackedDisposablesAreNotTracked()
{
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(MyUntrackedDisposable), () => new MyUntrackedDisposable());
var untrackedDisposable = resolver.Resolve<MyUntrackedDisposable>();
var untrackedDisposableWeakRef = new WeakReference<MyUntrackedDisposable>(untrackedDisposable);
untrackedDisposable = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Assert.False(untrackedDisposableWeakRef.TryGetTarget(out untrackedDisposable));
}
示例4: HubReferencesAreNotRetained
public void HubReferencesAreNotRetained()
{
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(DontLeakMeHub), () => new DontLeakMeHub());
var hub = resolver.Resolve<DontLeakMeHub>();
Assert.NotNull(hub);
var hubWeakRef = new WeakReference<DontLeakMeHub>(hub);
hub.Dispose();
hub = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Assert.False(hubWeakRef.TryGetTarget(out hub));
}
示例5: NullUnprotectedConnectionTokenThrows
public void NullUnprotectedConnectionTokenThrows()
{
var connection = new Mock<PersistentConnection>() { CallBase = true };
var req = new Mock<IRequest>();
var protectedData = new Mock<IProtectedData>();
protectedData.Setup(m => m.Protect(It.IsAny<string>(), It.IsAny<string>()))
.Returns<string, string>((value, purpose) => value);
protectedData.Setup(m => m.Unprotect(It.IsAny<string>(), It.IsAny<string>())).Returns((string)null);
var dr = new DefaultDependencyResolver();
dr.Register(typeof(IProtectedData), () => protectedData.Object);
var context = new HostContext(req.Object, null);
connection.Object.Initialize(dr, context);
Assert.Throws<InvalidOperationException>(() => connection.Object.GetConnectionId(context, "1"));
}
示例6: AuthenticatedUserNameMatches
public void AuthenticatedUserNameMatches()
{
var connection = new Mock<PersistentConnection>() { CallBase = true };
var req = new Mock<IRequest>();
req.Setup(m => m.User).Returns(new GenericPrincipal(new GenericIdentity("Name"), new string[] { }));
var protectedData = new Mock<IProtectedData>();
protectedData.Setup(m => m.Protect(It.IsAny<string>(), It.IsAny<string>()))
.Returns<string, string>((value, purpose) => value);
protectedData.Setup(m => m.Unprotect(It.IsAny<string>(), It.IsAny<string>())).Returns<string, string>((value, purpose) => value);
var dr = new DefaultDependencyResolver();
dr.Register(typeof(IProtectedData), () => protectedData.Object);
var context = new HostContext(req.Object, null);
connection.Object.Initialize(dr, context);
var connectionId = connection.Object.GetConnectionId(context, "1:Name");
Assert.Equal("1", connectionId);
}
示例7: DisconnectFiresForHubsWhenConnectionGoesAway
public void DisconnectFiresForHubsWhenConnectionGoesAway()
{
using (var host = new MemoryHost())
{
var dr = new DefaultDependencyResolver();
var configuration = dr.Resolve<IConfigurationManager>();
var connectWh = new ManualResetEventSlim();
var disconnectWh = new ManualResetEventSlim();
host.Configure(app =>
{
var config = new HubConfiguration
{
Resolver = dr
};
app.MapHubs("/signalr", config);
configuration.DisconnectTimeout = TimeSpan.Zero;
configuration.HeartbeatInterval = TimeSpan.FromSeconds(5);
dr.Register(typeof(MyHub), () => new MyHub(connectWh, disconnectWh));
});
var connection = new Client.Hubs.HubConnection("http://foo/");
connection.CreateHubProxy("MyHub");
// Maximum wait time for disconnect to fire (3 heart beat intervals)
var disconnectWait = TimeSpan.FromTicks(configuration.HeartbeatInterval.Ticks * 3);
connection.Start(host).Wait();
Assert.True(connectWh.Wait(TimeSpan.FromSeconds(10)), "Connect never fired");
connection.Stop();
Assert.True(disconnectWh.Wait(disconnectWait), "Disconnect never fired");
}
}
示例8: DisconnectFiresForPersistentConnectionWhenClientCallsStop
public async Task DisconnectFiresForPersistentConnectionWhenClientCallsStop()
{
using (var host = new MemoryHost())
{
var connectWh = new AsyncManualResetEvent();
var disconnectWh = new AsyncManualResetEvent();
var dr = new DefaultDependencyResolver();
var configuration = dr.Resolve<IConfigurationManager>();
host.Configure(app =>
{
var config = new ConnectionConfiguration
{
Resolver = dr
};
app.MapSignalR<MyConnection>("/echo", config);
configuration.DisconnectTimeout = TimeSpan.FromSeconds(6);
dr.Register(typeof(MyConnection), () => new MyConnection(connectWh, disconnectWh));
});
var connection = new Client.Connection("http://foo/echo");
// Maximum wait time for disconnect to fire (3 heart beat intervals)
var disconnectWait = TimeSpan.FromTicks(configuration.HeartbeatInterval().Ticks * 3);
await connection.Start(host);
Assert.True(await connectWh.WaitAsync(TimeSpan.FromSeconds(10)), "Connect never fired");
connection.Stop();
Assert.True(await disconnectWh.WaitAsync(disconnectWait), "Disconnect never fired");
}
}
示例9: ContextGroupAddCompletesSuccessfully
public async Task ContextGroupAddCompletesSuccessfully()
{
// https://github.com/SignalR/SignalR/issues/3337
// Each node shares the same bus but are independent servers
var counters = new Infrastructure.PerformanceCounterManager();
var configurationManager = new DefaultConfigurationManager();
using (EnableDisposableTracing())
using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000))
using (var memoryHost = new MemoryHost())
{
memoryHost.Configure(app =>
{
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(IMessageBus), () => bus);
app.MapSignalR(new HubConfiguration { Resolver = resolver });
});
using (var connection = new HubConnection("http://goo/"))
{
var proxy = connection.CreateHubProxy("FarmGroupHub");
const string group = "group";
const string message = "message";
var mre = new AsyncManualResetEvent();
proxy.On<string>("message", m =>
{
if (m == message)
{
mre.Set();
}
});
await connection.Start(memoryHost);
// Add the connection to a group via an IHubContext on a "second" server.
var secondResolver = new DefaultDependencyResolver();
secondResolver.Register(typeof(IMessageBus), () => bus);
var secondConnectionManager = secondResolver.Resolve<IConnectionManager>();
var secondHubContext = secondConnectionManager.GetHubContext<FarmGroupHub>();
await secondHubContext.Groups.Add(connection.ConnectionId, group);
await proxy.Invoke("SendToGroup", group, message);
Assert.True(await mre.WaitAsync(TimeSpan.FromSeconds(5)));
}
}
}
示例10: UncleanDisconnectFiresOnDisconnected
public void UncleanDisconnectFiresOnDisconnected()
{
// Arrange
var req = new Mock<IRequest>();
req.Setup(m => m.Url).Returns(new Uri("http://foo"));
req.Setup(m => m.LocalPath).Returns("");
var qs = new NameValueCollection();
qs["connectionToken"] = "1";
req.Setup(m => m.QueryString).Returns(new NameValueCollectionWrapper(qs));
var res = new Mock<IResponse>();
res.SetupProperty(m => m.StatusCode);
var dr = new DefaultDependencyResolver();
var context = new HostContext(req.Object, res.Object);
var transport = new Mock<ITransport>();
transport.SetupProperty(m => m.Disconnected);
transport.Setup(m => m.ProcessRequest(It.IsAny<Connection>())).Returns(TaskAsyncHelper.Empty);
var transportManager = new Mock<ITransportManager>();
transportManager.Setup(m => m.GetTransport(context)).Returns(transport.Object);
var protectedData = new Mock<IProtectedData>();
protectedData.Setup(m => m.Unprotect(It.IsAny<string>(), It.IsAny<string>()))
.Returns<string, string>((value, purpose) => value);
dr.Register(typeof(ITransportManager), () => transportManager.Object);
dr.Register(typeof(IProtectedData), () => protectedData.Object);
var connection = new Mock<PersistentConnection>() { CallBase = true };
var onDisconnectedCalled = false;
connection.Protected().Setup("OnDisconnected", req.Object, "1", false).Callback(() =>
{
onDisconnectedCalled = true;
});
connection.Object.Initialize(dr);
// Act
var processRequestTask = connection.Object.ProcessRequest(context);
transport.Object.Disconnected(/* clean: */ false);
// Assert
Assert.Equal(TaskAsyncHelper.Empty, processRequestTask);
Assert.True(onDisconnectedCalled);
}
示例11: AuthenticatedUserWithColonsInUserName
public void AuthenticatedUserWithColonsInUserName()
{
var connection = new Mock<PersistentConnection>() { CallBase = true };
var req = new Mock<IRequest>();
req.Setup(m => m.User).Returns(new GenericPrincipal(new GenericIdentity("::11:::::::1:1"), new string[] { }));
string connectionId = Guid.NewGuid().ToString("d");
var protectedData = new Mock<IProtectedData>();
protectedData.Setup(m => m.Protect(It.IsAny<string>(), It.IsAny<string>()))
.Returns<string, string>((value, purpose) => value);
protectedData.Setup(m => m.Unprotect(It.IsAny<string>(), It.IsAny<string>())).Returns<string, string>((value, purpose) => value);
var dr = new DefaultDependencyResolver();
dr.Register(typeof(IProtectedData), () => protectedData.Object);
var context = new HostContext(req.Object, null);
connection.Object.Initialize(dr);
string cid;
string message;
int statusCode;
Assert.Equal(true, connection.Object.TryGetConnectionId(context, connectionId + ":::11:::::::1:1", out cid, out message, out statusCode));
Assert.Equal(connectionId, cid);
}
示例12: ConnectionCanAddAnotherConnectionOnAnotherHostToAGroup
public async Task ConnectionCanAddAnotherConnectionOnAnotherHostToAGroup()
{
using (var host1 = new MemoryHost())
using (var host2 = new MemoryHost())
{
var sharedBus = new DefaultDependencyResolver().Resolve<IMessageBus>();
host1.Configure(app =>
{
var resolver = new DefaultDependencyResolver();
var ackHandler = new SignalR.Infrastructure.AckHandler(
completeAcksOnTimeout: true,
ackThreshold: TimeSpan.FromSeconds(10),
ackInterval: TimeSpan.FromSeconds(1));
resolver.Register(typeof(SignalR.Infrastructure.IAckHandler), () => ackHandler);
resolver.Register(typeof(IMessageBus), () => sharedBus);
app.MapSignalR<MyGroupConnection>("/groups", new ConnectionConfiguration
{
Resolver = resolver
});
});
host2.Configure(app =>
{
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(IMessageBus), () => sharedBus);
app.MapSignalR<MyGroupConnection>("/groups", new ConnectionConfiguration
{
Resolver = resolver
});
});
using (var connection1 = new Connection("http://foo/groups"))
using (var connection2 = new Connection("http://foo/groups"))
{
var messageTcs = new TaskCompletionSource<string>();
connection2.Received += message =>
{
messageTcs.SetResult(message);
};
await connection1.Start(host1);
await connection2.Start(host2);
await connection1.Send(new
{
// Add to group
type = 1,
group = "testGroup",
connectionId = connection2.ConnectionId
});
await connection1.Send(new
{
// Send to group
type = 3,
group = "testGroup",
message = "testMessage"
});
Assert.True(messageTcs.Task.Wait(TimeSpan.FromSeconds(10)));
Assert.Equal("testMessage", messageTcs.Task.Result);
}
}
}
示例13: DetailedErrorsFromFaultedTasksCanBeEnabled
public void DetailedErrorsFromFaultedTasksCanBeEnabled()
{
// Arrange
var dispatcher = new HubDispatcher(new HubConfiguration() { EnableDetailedErrors = true });
var request = GetRequestForUrl("http://something/signalr/send");
request.Setup(m => m.QueryString).Returns(new NameValueCollectionWrapper(new NameValueCollection()
{
{"transport", "longPolling"},
{"connectionToken", "0"},
{"data", "{\"H\":\"ErrorHub\",\"M\":\"ErrorTask\",\"A\":[],\"I\":0}"}
}));
request.Setup(m => m.ReadForm()).Returns(Task.FromResult<INameValueCollection>(new NameValueCollectionWrapper()));
string contentType = null;
var buffer = new List<string>();
var response = new Mock<IResponse>();
response.SetupGet(m => m.CancellationToken).Returns(CancellationToken.None);
response.SetupSet(m => m.ContentType = It.IsAny<string>()).Callback<string>(type => contentType = type);
response.Setup(m => m.Write(It.IsAny<ArraySegment<byte>>())).Callback<ArraySegment<byte>>(data => buffer.Add(Encoding.UTF8.GetString(data.Array, data.Offset, data.Count)));
// Act
var context = new HostContext(request.Object, response.Object);
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(IProtectedData), () => new EmptyProtectedData());
resolver.Register(typeof(ErrorHub), () => new ErrorHub());
dispatcher.Initialize(resolver);
dispatcher.ProcessRequest(context).Wait();
var json = JsonSerializer.Create(new JsonSerializerSettings());
// Assert
Assert.Equal("application/json; charset=UTF-8", contentType);
Assert.True(buffer.Count > 0);
using (var reader = new StringReader(String.Join(String.Empty, buffer)))
{
var hubResponse = (HubResponse)json.Deserialize(reader, typeof(HubResponse));
Assert.Equal("Custom Error from task.", hubResponse.Error);
}
}
示例14: SubscriptionWithScaleoutCursorGetsOnlyNewMessages
public void SubscriptionWithScaleoutCursorGetsOnlyNewMessages()
{
var dr = new DefaultDependencyResolver();
var passThroughMinfier = new PassThroughStringMinifier();
dr.Register(typeof(IStringMinifier), () => passThroughMinfier);
using (var bus = new MessageBus(dr))
{
Func<ISubscriber> subscriberFactory = () => new TestSubscriber(new[] { "key" });
var tcs = new TaskCompletionSource<Message[]>();
IDisposable subscription = null;
try
{
// Set-up dummy subscription so the first Publish doesn't noop
bus.Subscribe(subscriberFactory(), null, (result, state) => TaskAsyncHelper.True, 10, null).Dispose();
bus.Publish("test", "key", "badvalue").Wait();
subscription = bus.Subscribe(subscriberFactory(), "s-key,00000000", (result, state) =>
{
tcs.TrySetResult(result.GetMessages().ToArray());
return TaskAsyncHelper.True;
}, 10, null);
bus.Publish("test", "key", "value");
Assert.True(tcs.Task.Wait(TimeSpan.FromSeconds(5)));
foreach (var m in tcs.Task.Result)
{
Assert.Equal("key", m.Key);
Assert.Equal("value", m.GetString());
}
}
finally
{
if (subscription != null)
{
subscription.Dispose();
}
}
}
}
示例15: FarmGroupAddCompletesSuccessfully
public async Task FarmGroupAddCompletesSuccessfully(TransportType transportType)
{
// https://github.com/SignalR/SignalR/issues/3337
// Each node shares the same bus but are independent servers
const int nodeCount = 2;
var counters = new Infrastructure.PerformanceCounterManager();
var configurationManager = new DefaultConfigurationManager();
// Ensure /send and /connect requests get handled by different servers
Func<string, int> scheduler = url => url.Contains("/send") ? 0 : 1;
using (EnableDisposableTracing())
using (var bus = new MessageBus(new StringMinifier(), new TraceManager(), counters, configurationManager, 5000))
using (var loadBalancer = new LoadBalancer(nodeCount, scheduler))
{
loadBalancer.Configure(app =>
{
var resolver = new DefaultDependencyResolver();
resolver.Register(typeof(IMessageBus), () => bus);
app.MapSignalR(new HubConfiguration { Resolver = resolver });
});
using (var connection = new HubConnection("http://goo/"))
{
var proxy = connection.CreateHubProxy("FarmGroupHub");
const string group = "group";
const string message = "message";
var mre = new AsyncManualResetEvent();
proxy.On<string>("message", m =>
{
if (m == message)
{
mre.Set();
}
});
Client.Transports.IClientTransport transport;
switch (transportType)
{
case TransportType.LongPolling:
transport = new Client.Transports.LongPollingTransport(loadBalancer);
break;
case TransportType.ServerSentEvents:
transport = new Client.Transports.ServerSentEventsTransport(loadBalancer);
break;
default:
throw new ArgumentException("transportType");
}
await connection.Start(transport);
await proxy.Invoke("JoinGroup", group);
await proxy.Invoke("SendToGroup", group, message);
Assert.True(await mre.WaitAsync(TimeSpan.FromSeconds(5)));
}
}
}