Vì vậy, tôi đã chơi xung quanh với bản phát hành mới nhất của WCF Web API và quyết định tôi muốn đi sâu vào triển khai Ninject với nó.Thiết lập Ninject với WCF Web API mới
Dựa tắt những gì tôi đã đọc tôi cần phải thực hiện các IResourceFactory giao diện mà đòi hỏi các phương pháp sau:
public object GetInstance(System.Type serviceType,
System.ServiceModel.InstanceContext instanceContext,
System.Net.Http.HttpRequestMessage request);
public void ReleaseInstance(System.ServiceModel.InstanceContext instanceContext,
object service);
Vì vậy, gà tôi bị trầy xước sau ra:
public class NinjectResourceFactory : IResourceFactory
{
private readonly IKernel _kernel;
public NinjectResourceFactory()
{
var modules = new INinjectModule[]
{
new ServiceDIModule(), //Service Layer Module
new RepositoryDIModule(), //Repo Layer Module
new DataServiceDIModule()
};
_kernel = new StandardKernel(modules);
}
#region IResourceFactory Members
public object GetInstance(Type serviceType,
InstanceContext instanceContext,
HttpRequestMessage request)
{
return Resolve(serviceType);
}
public void ReleaseInstance(InstanceContext instanceContext, object service)
{
throw new NotImplementedException();
}
#endregion
private object Resolve(Type type)
{
return _kernel.Get(type);
}
//private T Resolve<T>()
//{
// return _kernel.Get<T>();
//}
//private T Resolve<T>(string name)
//{
// return _kernel.Get<T>(metaData => metaData.Has(name));
// return _kernel.Get<T>().Equals(With.Parameters.
// ContextVariable("name", name));
//}
}
và có dây nó lên với
var configuration = HttpHostConfiguration.Create().SetResourceFactory(new NinjectResourceFactory());
RouteTable.Routes.MapServiceRoute<StateProvinceResource>("States", configuration);
Thật ngạc nhiên, điều này dường như hiệu quả. Phương thức tài nguyên đầu tiên mà tôi đã tạo để phân phối danh sách các tiểu bang/tỉnh tạo ra kết quả đầu ra với HTTP 200 OK.
Vì vậy, đối với câu hỏi. Có cách nào sạch hơn cách viết nhà máy này không? Tôi thực sự lúng túng thông qua nó và nó chỉ cảm thấy không đúng. Tôi cảm thấy như tôi đang thiếu một cái gì đó rõ ràng nhìn chằm chằm vào mặt tôi. Các hack tôi thực hiện trong phương pháp Resolve mới cảm thấy đặc biệt là bẩn vì vậy tôi figured tôi muốn gõ vào những người có kinh nghiệm hơn để thắt chặt này lên. Có ai khác đã triển khai Ninject với WCF Web API và triển khai một giải pháp sạch hơn không?
Cảm ơn mọi đầu vào!
điều này có vẻ tương tự như điều tôi đã làm với structuremap. đi qua các đối tượng luôn luôn cảm thấy một chút hacky, nhưng nếu những gì khuôn khổ của nó mang đến cho bạn, sự lựa chọn là có, bên cạnh việc lăn của riêng bạn tất nhiên. –